Constructing from a classmethod
假设我正在Kv数据存储中创建一个表示和对象的类。创建构造函数非常简单…
1 2 3 4 5 6 | class KVObject: def __init__(self, key, value, add=True): self.key = key self.value = value if add == True: kv_create(key, value) |
现在,假设我想取回一个千伏物体…并从中构造类实例。我想我将把这个类方法添加到我的databaseobject类中。
1 2 3 4 | @classmethod def get_kv_object(cls, key): value = kv_get(key) cls.__init__(key, value, add=False) |
…但是当从类方法(cls.uu init_uuuu)调用init时,python会为self请求一个参数!
有什么想法吗?多谢!我知道这是一个简单的例子,但它绝对适用于一些更复杂、有趣的情况!
编辑:感谢您的回复。在研究这个对象的时候,我学到了一些有用的东西。当调用myClass(…)时,new_uuuuu调用对象的init,有效地向myClass.init提供了一个未初始化的实例,其中包含了从myClass内部调用的参数。同样,按照您的答案中的建议,调用cls(…)也是有意义的。谢谢您。
考虑一下通常如何创建一个新的数据库对象,它是如下所示的:
1 | instance = DatabaseObject(key, value, add=False) |
在类方法中,第一个参数(本例中的
1 | instance = cls(key, value, add=False) |
1 2 3 4 | @classmethod def get_kv_object(cls, key): value = kv_get(key) return cls(key, value, add=False) |