关于python:从classmethod构造

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)

在类方法中,第一个参数(本例中的cls只是DatabaseObject的另一个名称,因此要创建一个实例,您可以执行以下操作:

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)

__init__没有创建cls类的新实例!它是在创建对象后立即调用的方法。