python - 将类的实例(类的对象)传递给另一个类

标签 python oop

我不明白的是b = Bar(a)。它有什么作用? Bar 如何将 a 作为参数?

那不是说 Bar 继承自 a 吗?什么是 Bar.Foo1 = Foo?这是否意味着 Foo1 是类 Foo() 的一个实例?当 Foo1 本身是一个对象时,我们如何访问它? b.arg.variable 是什么意思?这是否意味着 b 有一个方法 arg,它有一个名为 variable 的变量?以下代码来自this answer

我只是找不到解析对象作为另一个类的参数。

  class Foo (object):
  #^class name  #^ inherits from object

      bar = "Bar" #Class attribute.

      def __init__(self):
          #        #^ The first variable is the class instance in methods.  
          #        #  This is called "self" by convention, but could be any name you want.
       

          self.variable="Foo" #instance attribute.
          print self.variable, self.bar  #<---self.bar references class attribute
          self.bar = " Bar is now Baz"   #<---self.bar is now an instance attribute
          print self.variable, self.bar  

       def method(self,arg1,arg2):
          #This method has arguments. You would call it like this : instance.method(1,2)
          print "in method (args):",arg1,arg2
          print "in method (attributes):", self.variable, self.bar


 a=Foo() # this calls __init__ (indirectly), output:
             # Foo bar
             # Foo  Bar is now Baz
 print a.variable # Foo
 a.variable="bar"
 a.method(1,2) # output:
               # in method (args): 1 2
               # in method (attributes): bar Bar is now Baz
 Foo.method(a,1,2) #<--- Same as a.method(1,2).  This makes it a little more explicit what the argument "self" actually is.

 class Bar(object):
     def __init__(self,arg):
          self.arg=arg
          self.Foo1=Foo()

 b=Bar(a)
 b.arg.variable="something"
 print a.variable # something
 print b.Foo1.variable # Foo

最佳答案

“我不明白的是 b = Bar(a)。它有什么作用?”

b = Bar(a) 做了两件事。首先,它创建了一个 Bar 类的对象(附加了任何类变量和方法)。然后,它运行 __init__,第一个参数 (self) 指向刚创建的对象,第二个参数 a ( 参数)。在运行 __init__ 时,作为该方法中的命令之一,它将 self.arg 设置为指向 arg 指向的对象(即到变量 a 指向的对象)。最后,变量 b 被设置为引用创建的对象。

这样想可能会有所帮助:Python 中的变量实际上只是指向对象的指针。您可以有多个变量指向同一个对象。在这种情况下,ab.arg 都指向同一个对象。

一开始我也发现这种事情很困惑。我曾看到建议将变量视为与其指向的对象分开的概念,并忽略了它,因为它不必要地使事情复杂化,但我不得不重新接受这种思维方式才能理解事物。人们确实经常使用变量作为名称来引用它所指向的对象;你只需要知道什么时候该照字面意思或不照字面意思理解。

“这不是说 Bar 继承自 a 吗?”

没有。如果 a 是一个类,那么 class Bar(a) 就意味着 Bar 继承自 a。但在 b = Bar(a)a 是作为参数传递给 __init__ 的对象。

“什么是 Bar.Foo1 = Foo?”

抱歉 - 我在您提供的示例代码中没有看到这一点。

“b.arg.variable是什么意思?”

b 是一个对象(我的意思是,b 指的是一个对象)并且 b.arg 是该对象的属性之一.方法和变量是不同类型的属性。在这种情况下,b.arg 是一个指向对象的变量。 b.arg 引用的对象具有属性variable,这是一个变量。

b.arg 指的是 a 指的同一个对象,因此 b.arg.variable 是与 相同的变量>a.变量。它不仅指向同一个对象,而且实际上是同一个变量。它指向的对象是字符串"something"

@Brenbarn:我认为这就是 quirius 的意思“那不是说 Bar 继承自 a 吗?”。

关于python - 将类的实例(类的对象)传递给另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223722/

相关文章:

python - 导入错误 : DLL load failed: The specified module could not be found. cv2

python - 如何在python中减去两个列表

python - gitlab-ci.yml : 'script: -pytest' command is not recognized

java - 为什么在最终的 Java 类中允许 protected 成员?

matlab - 在 MATLAB 中连接同一父类(super class)的子类数组

c++ - 我如何使用 std::sort 按 x 坐标对结构进行排序

"Google search by image"的 Python 脚本

java - 有没有类似 j2me 的 python 解析器之类的东西?

php - 在插件中使用 WP_List_Table

java - 为什么要覆盖父类(super class)并在函数内部再次调用它?