2013-08-01 104 views
-1

我一直在試圖理解Python實現OOP的。傳遞一個對象作爲參數傳入一個子類在python

基本上我需要的東西,這是規定人l其他類作爲其方法輸入使用一些全局屬性的超類。例如:

這是我認爲它應該做的事:

class One(): 
    def __init__(self, name): 
     self.name = name 

class Two(One): 
    def __init__(self, name): # name from class one... 
     One.__init__(self, name)   
    def method_using_name_from_one(self, name_from_one): 
     return name_from_one 

我想,我可以只在聲明類Two所有方法作爲一個類的方法做到這一點,但我更喜歡讓他們分開。回顧一下:我希望類2中方法的參數使用類One中聲明的屬性。所以基本上我想傳入一個實例化對象作爲類Two方法的參數參數。

+0

你期待'self'不有1類2級的方法的屬性?剛使用'self.name'有什麼問題? – user2357112

+1

我對你不瞭解的東西感到非常困惑。你可以在類'Two'內的方法中使用self.name' –

+0

參數'name_from_one'對我來說似乎是一種代碼味道。如果要通過一個值作爲參數,它不是真的「從一個」。如果您想在鏈式構造函數中使用分配給您的'Two'實例的'name'屬性的值,請使用'self.name',如其他人所述。 –

回答

0

當你說

class Two(One): 

一個不是class Two參數。這意味着第二類繼承自第一類。換句話說,除非你重寫一個方法,否則它會得到類One的所有東西。 編輯:當我這樣說時,我的意思是參數和函數,我不是指類的一個實例。既然你有:

def __init__(self, name): # name from class one... 
    One.__init__(self, name) 

self.name是class Two.換句話說,你可以只說...

def method_using_name_from_one(self): 
    return self.name 

有一件事我建議是改變你的類中的一個聲明:

class One(object): 

這意味着它從對象繼承,它並不意味着它正在通過一個對象:) 這是你的意思?也許我不明白。

如果你想從One,名稱參數,你可以說

def method_using_name_from_one(self, oneInstance): 
    return oneInstance.name 
+0

啊當然對了。雖然我不認爲我很清楚。我基本上希望第二類具有需要第一類實例作爲「參數」輸入的方法。你可以通過實際上聲明一個'type'(例如,甚至原始類型是否是類...)來做到這一點,並想知道如何在python中做類似的事情。 – James

+0

你能舉一個你在Java中的意思嗎?我沒有完全遵循。無論如何,這不是我最後一個例子嗎? – liang

相關問題