从类方法构建

时间:2013-10-22 22:26:13

标签: python python-2.7

假设我在KV数据存储区中创建一个表示对象的类。创建构造函数非常简单......

class KVObject:
    def __init__(self, key, value, add=True):
        self.key = key
        self.value = value
        if add == True:
            kv_create(key, value)

现在,假设我要检索一个KV对象......并从中构造一个类实例。我想我会将这个类方法添加到我的DataBaseObject类中。

     @classmethod
     def get_kv_object(cls, key):
         value = kv_get(key)
         cls.__init__(key, value, add=False)

...但是当从类方法(cls .__ init__)调用 init 时,Python会要求自我参数!

有什么想法吗?非常感谢!我知道这是一个简单的例子,但它肯定适用于一些更复杂,有趣的情况!

修改:感谢您的回复。在研究这个时,我学到了一些有用的东西,就是那个对象.__ new__在调用MyClass(...)时调用了一个对象的__init__,有效地为MyClass提供了一个未初始化的类实例。 init with args从MyClass中调用。同样,按照答案中的建议调用cls(...)是有意义的。谢谢。

2 个答案:

答案 0 :(得分:2)

考虑一下如何正常创建一个新的数据库对象,它将类似于以下内容:

instance = DatabaseObject(key, value, add=False)

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

instance = cls(key, value, add=False)

答案 1 :(得分:1)

@classmethod
 def get_kv_object(cls, key):
     value = kv_get(key)
     return cls(key, value, add=False)

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