繁体   English   中英

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

[英]Passing an instance of a class (object of a class) to another class

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

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

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

  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作为第二个参数 ( arg )。 在运行__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.variable 它不仅指向同一个对象,而且实际上是同一个变量。 它指向的对象是字符串"something"

@Brenbarn:我认为这就是 quirius 的意思“这是否意味着 Bar 继承自 a?”。

这是一个更简单的例子。 假设你有这些类:

class Foo(object):
    pass

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

您可以执行以下两项操作:

# Option 1: pass in an integer
>>> b = Bar(1)
>>> b.arg
1

# Option 2: pass in a Foo object
>>> a = Foo()
>>> b = Bar(a)
>>> b.arg
<__main__.Foo object at 0x0000000002A440F0>

这两种情况的处理方式没有区别 传入a (一个 Foo 对象)与传入一个整数没有什么不同。 Bar所做的只是存储传入的值,并且无论它是 Foo 还是 int,它都可以存储相同的值。 当您调用Bar(something) ,如何处理传入的对象完全取决于Bar类。不涉及传入对象的类型,除非Bar选择显式涉及它(例如,通过在传入的对象上调用方法)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM