也许问题不明确。我可以举一个例子。
class foo:
def __init__(self):
pass
var1 = ''
def set_var1(self, value):
self.var1 = value
class bar:
def __init__(self, foo):
self.my_foo = foo
my_foo = None
def call_var1(self):
print('var1:'+ foo(self.my_foo).var1)
在main.py中
if __name__ == '__main__':
my_foo = foo()
my_foo.set_var1 = 'Hello'
my_bar = bar(my_foo)
my_bar.call_var1()
在我调用方法call_var1()
后,我得到了一个结果:"var1:"
。似乎值没有分配给栏内的对象my_foo?这是python的一个特殊功能吗?
答案 0 :(得分:2)
回答你的问题:是。传递给构造函数后,对象是相同的。
我做了两个修正:
foo()
self.my_foo
函数中bar
周围的call_var1(self)
。my_foo.set_var1 = 'Hello'
更改为my_foo.set_var1('Hello')
。结果代码:
class foo:
def __init__(self):
pass
var1 = ''
def set_var1(self, value):
self.var1 = value
class bar:
def __init__(self, foo):
self.my_foo = foo
my_foo = None
def call_var1(self):
print('var1:'+ self.my_foo.var1)
if __name__ == '__main__':
my_foo = foo()
my_foo.set_var1('Hello')
my_bar = bar(my_foo)
my_bar.call_var1()
输出现在是:
var1:Hello
答案 1 :(得分:0)
我仍然不明白你想要做什么,但我认为这样你的代码更容易理解:
class foo:
def __init__(self, value):
self.var1 = value
class bar:
def __init__(self, foo):
self.my_foo = foo
def call_var1(self):
print('var1:'+ self.my_foo.var1)
if __name__ == '__main__':
my_foo = foo('Hello')
my_bar = bar(my_foo)
my_bar.call_var1()
在任何情况下,你都会将你的foo对象分配给你的self.my_foo,但逻辑上不是变量的值。如果你想为你的变量self.my_foo分配你必须做的self.var1的值:
class foo:
def __init__(self, value):
self.var1 = value
class bar:
def __init__(self, foo):
self.my_foo = foo.var1
def call_var1(self):
print('var1:'+ self.my_foo)
if __name__ == '__main__':
my_foo = foo('Hello')
my_bar = bar(my_foo)
my_bar.call_var1()