我们如何直接在 class 构造函数中使用 json.dumps,而不是通过单独的函数调用它?

How can we use json.dumps directly in class constructor, instead of calling it via separate function?

我们如何直接在构造函数中使用 json.dumps,而不是通过单独的函数调用它?

def json_serialize(obj, *args):
    return json.dumps(obj)

class KafkaProducer(object):

    def __init__(self, config):
        config = {
            "key.serializer": json_serialize,
            "value.serializer": json_serialize,
        }
        self.producer = SerializingProducer(config)

    def produce(self, *args, **kwargs):
        self.producer.produce(*args, **kwargs)
        self.producer.flush()

当我使用 KafkaProducer class 的生产方法时,它适用于上述实现。由于 json_serialize 函数仅用于执行 json.dumps(obj).

如果我尝试使用 json.dumps 直接在 KafkaProducer 中尝试此操作,如下所示,然后调用生成 class 的方法,它将不起作用。给出错误:


    KafkaError{code=_KEY_SERIALIZATION,val=-162,str="dumps() takes 1 positional argument but 2 were given"}

class KafkaProducer(object):

    def __init__(self, config):
        config = {
            "key.serializer": json.dumps,
            "value.serializer": json.dumps,
        }
        self.producer = SerializingProducer(config)

    def produce(self, *args, **kwargs):
        self.producer.produce(*args, **kwargs)
        self.producer.flush()

嗯,你不能。 key.serializervalue.serializer 函数必须具有以下 signatureCallable(obj, SerializationContext) -> bytesjson.dumps 不接受 SerializationContext 作为参数,所以你需要在它周围使用一些包装器。这就是为什么你需要 json_serialize 函数。