2014-02-19 82 views
1

如果我有兩個文件class1_file.pyclass2_file.py並且它們中的每一個都已獲得類class1class2Python將類對象傳遞到另一個類

class1_file.py

class class1: 
    def dummy(self, class2): 
     class2.dummy() 

class2_file.py:

class class2 
    def dummy(self): 
     print 'hey' 

我將需要包括:到class1_file.py爲Class1中dummy方法工作from class2_file import class2?我有點困惑,因爲我來自強類型語言,它需要導入類並將它們傳遞給方法以供使用。但是對於python來說,它似乎可以是任何類型的參數,並且它將在編譯時解決它。如果不是必需的,class1中的方法如何知道的函數dummy是什麼?

回答

1

如果你的目的是要傳遞的class2的目的是class1dummy,然後創造class2一個對象,你需要導入的Class2。

from class2_file import class2 
class class1: 
    def dummy(self, obj):  # To avoid confusion changed the variable name 
     obj.dummy() 

class1().dummy(class2())  # import is needed for `class2()` part only 

除此之外,class2只是一個變量名,可以是任何東西。這就是爲什麼我在這個答案中將它改爲obj

當你這樣做時class2() Python將在所有有效的作用域中尋找class2的定義,並且不會被找到。但是當你做

from class2_file import class2 

你在本模塊中引入class2作爲本地名稱。所以,Python將能夠識別它。

def dummy(self, class2): 
     class2.dummy() 

當您創建這樣的功能,Python將嘗試執行class2.dummy(),它會class2作爲參數,而不是類,因爲class2的範圍是最近的名稱。只要class2的值通過dummy方法,該行就會被正確評估。

+0

謝謝。但這是否意味着@ zhangxaochen的答案是錯誤的? – user1234440

+2

@ user1234440他的回答也是正確的。檢查我的答案的最後一行。他只是試圖說明這一點。 – thefourtheye

1

不,您不必這樣做,因爲在簽名def dummy(self, class2):class2只是方法dummy中的局部變量。只要foo是方法dummy的對象,它也可以是def dummy(self, foo):。見Duck typing in Python

+0

這隻有在foo有一個「虛擬」方法的情況下才有效? –

+0

@JayanthKoushik是的,請參閱http://en.wikipedia.org/wiki/Duck_typing#In_Python – zhangxaochen

1

不要命名變量class2。是的,你需要從class2_file導入class2。

from class2_file import class2 

class class1: 
    def dummy(self, class2_obj): 
     class2_obj.dummy() 
相關問題