此问题/答案(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
吗?
答案 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的内部内容的不同值