2017-07-02 93 views
-1

當我們編寫object1.method(object2)時,哪個調用對象和哪個被調用對象?這是不是意味着在object1上調用method(參數object2)?還是僅僅object1是調用對象而object2是調用對象?調用對象和被調用對象

注意在回答下面留言,讓我澄清 -

「調用對象」是指調用method的對象。 「所謂的對象」是指method所作用的對象。

+4

「調用對象」實際上並不是一個明確定義的概念。 – Amber

+0

「調用對象」是調用「方法」的對象。 – debashish

+0

「調用對象」作爲第一個參數隱式傳遞(例如,在其類定義中作爲「self」):'object1.method(object2)'與'method(object1,object2)'相同。 – GH05T

回答

2

如果這是一個叫做object3的對象的方法的代碼的一部分,那麼可以說object3是「調用對象」,而object1是「調用對象」。 object2只是一個說法:

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

... 

object3 = Foo() 
object3.amethod()   
+0

這正是我的想法。感謝您澄清和確認。 – debashish

1

當我們寫object1.method(object2),這是調用對象,這是所謂的對象?

讓我們備份吧。 「呼叫對象」不是一個真正常用的術語,它的含義很模糊。我認爲這是你感到困惑的部分原因。

當編寫object1.method(object2)你是主叫method對象object1的方法和傳遞object2作爲參數給方法。這就是發生的事情。

object1不是「調用對象」。它只是一個對象,其method屬性被調用。您無法撥打對象本身。您可以改爲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 
>>> 

從技術上講,你可以電話的對象,通過一種叫operator overloading。但爲了避免讓你感到困惑,現在就忽略它。

+0

我所說的「被調用的對象」是「方法」在其上作用的對象。現在我清楚的知道'method'作用於'object1'作爲參數。感謝您的回覆。 – debashish