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

时间:2014-08-04 12:34:26

标签: python python-2.7 constructor

此问题/答案(Python call constructor in a member function)表示可以从成员函数中调用构造函数。

我该怎么做?

风格好吗?

我尝试使用以下代码:

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()

作为输出我得到:错误

我打电话build_new()方法inst.field应该是True吗?

2 个答案:

答案 0 :(得分:6)

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

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

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



SomeClass.build_new(False)

答案 1 :(得分:3)

我相信你要找的只是再次调用 init 函数。

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

    def build_new(self):
        self.__init__(True)

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

你当前的代码创建了一个新实例,当它超出范围(即函数返回)时就失去对它的引用,因为你只是将self的名称重新绑定到一个不实际改变self的内部内容的不同值