2012-07-21 34 views
6

我在過去幾天開始學習python,並在探索麪向對象的編程時遇到了問題。 我在運行pydev插件時使用Eclipse,在python 3.3 beta上運行,並使用Windows 64位系統。如何在Python中正確地擴展其他類? (python v3.3)

我可以初始化一個類,並使用其中的任何方法,只要我沒有試圖擴展超類(每個類我在不同的源文件中編碼) 例如,下面的代碼編譯並運行良好。

class pythonSuper: 
    string1 = "hello" 
    def printS(): 
     print pythonSuper.string1 

,並訪問並運行它的代碼...

from stackoverflow.questions import pythonSuper 
class pythonSub: 
    pysuper = pythonSuper.pythonSuper() 
    pysuper.printS() 

就像我說的,是作品。下面的代碼不

class pythonSuper: """Same superclass as above. unmodified, except for the spacing""" 
string1 = "hello" 
def printS(self): 
    print(pythonSuper.string1) 

嗯,這並不完全正確。至少就我所知,超類是絕對好的。它是weirds出

from stackoverflow.questions import pythonSuper 
class pythonSub(pythonSuper): 
    pass 

pythonObject = pythonSub() 
pythonSub.pythonSuper.printS() 
當子類運行Eclipse打印出此錯誤

Traceback (most recent call last): 
    File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",   
    line 7, in <module> 
class pythonSub(pythonSuper): 
TypeError: module.__init__() takes at most 2 arguments (3 given) 

我不知道發生了什麼事情

的子類。我一直在從新波士頓的教程學習python,但那些已經過時(我認爲他的教程代碼使用python版本2.7)。他還使用IDLE編碼,這意味着他的類都包含在一個文件中。但是,我的所有文件都以自己的文件編碼。這意味着我不知道我得到的代碼錯誤是由於過時的語法還是我對此語言缺乏瞭解。但我離題了。如果任何人可以回覆一個解決方案和/或解釋爲什麼代碼出錯,我可以做些什麼來解決它。解釋將是優選的。我寧願知道我做錯了什麼,所以我可以在類似的情況下避免和解決問題,而不僅僅是複製和粘貼一些代碼並查看它的工作原理。 謝謝,我期待你的回答

回答

0

pythonSuper指的是模塊,而不是類。

class pythonSub(pythonSuper.pythonSuper): 
    pass 
+0

謝謝,但現在它發佈了這個錯誤Traceback(最近調用最後): 文件「C:\ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub。pythonSub'沒有屬性'pythonSuper',我不想糾纏任何人,但是有什麼理由? – pipsqueaker117 2012-07-21 21:09:22

+3

爲什麼你會期望它對?pythonSub是擴展pythonSuper,不包含它。'printS'是繼承的,你可以通過你的pythonSub實例直接訪問它。 – 2012-07-21 21:16:55

+0

@DanielRoseman對不起,那個飛過了我的腦袋,你能解釋一下嗎? ,嗯,noob語言?(或者你可以鏈接到我可以學習所有這些東西的頁面) – pipsqueaker117 2012-07-21 23:15:09

3

我運行了你的代碼,儘管做了一些修改並且運行完美。這裏是我的代碼:

pythonSuper:

class pythonSuper: 
    string1 = 'hello' 
    def printS(self): 
     print(self.string1) 

主:

from pythonSuper import pythonSuper as pySuper 

class pythonSub(pySuper): 
    pass 

pythonObject = pythonSub() 
pythonObject.printS() 

注:我對你的代碼所做的更改如下:

在您的代碼,您已寫入pythonSub.pythonSuper.printS()這是不正確的,因爲通過pythonSub您已經支持printS()方法d,直接從超類繼承。所以沒有必要在該語句中明確引用超類。我用來代替上述提到的pythonObject.printS()的聲明似乎解決了這個問題。

+0

這給了我錯誤Traceback(最近調用最後一次): 文件「C:\ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub.py「,第8行,在 class pytho nSub(pySuper): TypeError:module .__ init __()至多需要2個參數(給出3個參數)我嘗試複製並粘貼代碼(使用我自己的包名稱),但結果是上述錯誤。我開始認爲這是一個Python 3.3語法的東西,因爲兩個解決方案已經失敗(從某種意義上說,程序沒有正確運行),但我可能完全脫離了標記 – pipsqueaker117 2012-07-21 23:06:48

+0

請發佈代碼,併爲我的錯誤更能夠幫助你。我相信這是你在你的代碼版本上犯的一個錯誤,我在Python 3.3中寫了上面的代碼,它效果很好! – NlightNFotis 2012-07-22 12:33:22