当我们写object1.method(object2)
时,它是调用对象,哪个是被调用对象?这是否意味着method
上调用了object1
(带有参数object2
)?或者只是object1
是调用对象而object2
是被调用对象?
注意在回复下面的评论时,让我澄清一下 -
"调用对象"表示调用method
的对象。 "称为对象"表示method
作用的对象。
答案 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的东西来调用一个对象。但是为了避免让你感到困惑,暂时忽略它。