Python:如何从成员函数中调用构造函数

jon*_*e83 1 python constructor python-2.7

这个问题/答案(成员函数中的Python调用构造函数)说可以从成员函数中调用构造函数.

我怎么做?

风格好吗?

我用以下代码尝试了它:

class SomeClass(object):
    def __init__(self, field):
        self.field = field

    def build_new(self):
        self = SomeClass(True)

def main():
    inst = SomeClass(False)
    inst.build_new()
    print(inst.field)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

作为输出我得到:错误

既然我打电话的build_new()方法inst.field应该True与否?

Dan*_*man 7

问题不在于调用构造函数,而在于您对结果所做的事情.self只是一个局部变量:赋值给它不会改变任何关于当前实例的东西,它只会重新绑定名称以指向一个新实例,然后在该方法结束时将其丢弃.

我不完全确定你要做什么,但也许你想要一个类方法?

class SomeClass(object):
   ...
   @classmethod
   def build_new(cls):
       return cls(True)



SomeClass.build_new(False)
Run Code Online (Sandbox Code Playgroud)


rdp*_*rdp 7

我相信您正在寻找的只是再次调用init函数。

class SomeClass(object):
    def __init__(self, field):
        self.field = field

    def build_new(self):
        self.__init__(True)
Run Code Online (Sandbox Code Playgroud)

这将导致字段变量设置为 True 而不是 False。基本上,您正在重新初始化实例而不是创建一个全新的实例。

您当前的代码创建了一个新实例,并且在它超出范围(即函数返回)时丢失了对它的引用,因为您只是将 self 的名称重新绑定到不同的值,而实际上并未更改 self 的内部内容。