我们如何直接在 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.serializer
和 value.serializer
函数必须具有以下 signature:Callable(obj, SerializationContext) -> bytes
。 json.dumps
不接受 SerializationContext
作为参数,所以你需要在它周围使用一些包装器。这就是为什么你需要 json_serialize
函数。
我们如何直接在构造函数中使用 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.serializer
和 value.serializer
函数必须具有以下 signature:Callable(obj, SerializationContext) -> bytes
。 json.dumps
不接受 SerializationContext
作为参数,所以你需要在它周围使用一些包装器。这就是为什么你需要 json_serialize
函数。