调用对象和被调用对象

时间:2017-07-02 03:18:25

标签: python oop

当我们写object1.method(object2)时,它是调用对象,哪个是被调用对象?这是否意味着method上调用了object1(带有参数object2)?或者只是object1是调用对象而object2是被调用对象?

注意在回复下面的评论时,让我澄清一下 -

"调用对象"表示调用method的对象。 "称为对象"表示method作用的对象。

2 个答案:

答案 0 :(得分:2)

如果这是被称为object3的对象的方法代码的一部分,那么可以说object3是“调用对象”,而object1是“被叫对象”。 object2只是一个论点:

class Foo:
    def amethod():
        ...
        object1.method(object2)

...

object3 = Foo()
object3.amethod()        

答案 1 :(得分:1)

  

当我们写object1.method(object2)时,它是调用对象,哪个是被调用对象?

让我们回来吧。 "调用对象" 并不是一个常见的术语,而且非常模糊。我认为这是你感到困惑的部分原因。

当您撰写object1.method(object2)时,您正在调用 对象 method的方法object1,并将object2传递为方法的参数。这就是发生了什么。

object1不是"调用对象"。它只是一个被调用method属性的对象。你不能按照 1 调用一个对象。您可以说object1对象method方法称为。这是正确的。

同样,object2不是"被称为对象"。无论如何,它从未被召唤过。它只是作为参数传递给object1.method()。这是我上面所说的一切的简单例子:

>>> class Object:
...     def method(self, arg):
...         print("I'm just an argument", arg)
...     # This method is simply for pretty printing
...     def __repr__(self):
...         return 'object'
... 
>>> 
>>> # Here's object1. We'll call its method attribute and pass in
... # object2 as an argument.
... 
>>> object1 = Object()
>>> # Here's object2. It's only being passed as an argument.
... 
>>> object2 = Object()
>>> 
>>> # Here's the call
... 
>>> object1.method(object2)
I'm just an argument object
>>> 

1 从技术上讲,你可以通过名为operator overloading的东西来调用一个对象。但是为了避免让你感到困惑,暂时忽略它。