Python - 传递给构造函数后的对象是一样的吗?

时间:2018-04-05 09:59:58

标签: python

也许问题不明确。我可以举一个例子。

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的一个特殊功能吗?

2 个答案:

答案 0 :(得分:2)

回答你的问题:。传递给构造函数后,对象是相同的。

我做了两个修正:

  1. 删除了foo() self.my_foo函数中bar周围的call_var1(self)
  2. my_foo.set_var1 = 'Hello'更改为my_foo.set_var1('Hello')
  3. 结果代码:

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