2010-02-12 112 views
0

我想完全掌握Python中的類繼承。我用類創建了程序,但它們都在一個文件中。我還創建了包含僅包含函數的多個文件的腳本。我已經開始在具有多個文件的腳本中使用類繼承,並且遇到了問題。我有兩個基本腳本,我試圖讓第二個腳本繼承第一個腳本的值。該代碼是如下的:類繼承

首先腳本:

class test(): 

    def q(): 

     a = 20 
     return a 

    def w(): 
     b = 30 
     return b 

    if __name__ == '__main__': 
     a = q() 
     b = w() 

if __name__ == '__main__': 
    (a, b) = test() 

第二個腳本:

from class1 import test 

class test2(test): 

    def e(a, b): 
     print a 
     print b 


    e(a, b) 

if __name__ == '__main__': 
    test2(test) 

任何人都可以向我解釋如何獲得第二個文件,以繼承第一檔值?謝謝你的幫助。

+2

哪些教程你在閱讀? – SilentGhost 2010-02-12 15:03:01

回答

13

我會說你搞砸了函數的東西類定義。它應該看起來更像是這樣的:

class Test(object): 

    def __init__(self): 
     self.a = 20 
     self.b = 30 

if __name__ == '__main__': 
    test_instance = Test() 

from class1 import Test 

class Test2(Test): 

    def e(self): 
     print self.a 
     print self.b 


if __name__ == '__main__': 
    test_instance = Test2() 
    test_instance.e() # prints 20 and 30 

它看起來像你的問題不是(只)繼承,但也如何正確define classes in Python

一些注意事項:

  • 始終使用類大寫的名稱。這或多或少是約定。
  • 正如ruibm所指出的,類的每個(非靜態)方法都必須有一個名爲(按照慣例)的第一個參數self
  • 您可以通過在__init__方法中將它們設置爲self.variable = value來創建實例變量。
  • 如果您撥打Test(),您會收到一個對象。除非你將它分配給一個變量,只要調用test2()就像你在第二段代碼中做的那樣沒有效果。也許它有你的情況,因爲以一種奇怪的方式定義你的課程。
+0

比我的回答好得多。我不應該懶惰到不寫代碼的地步!做得好。 :) – rui 2010-02-12 15:07:53

1

在Python中,類的每一個成員函數(方法)應該有一個稱爲self變量,它是相當多的在C++,Java和C#的this指針/參考。

基本上,要使您的代碼正常工作,請將self作爲所有方法的第一個參數。要分配/讀取成員變量,請使用self.aself.b,否則您只是按照現在的方式創建臨時函數變量。