2011-11-23 35 views
2

我寫過一些代碼,它包含一個主類和一些繼承超類變量的子類。python子類可以存儲在超類中的一個獨立模塊中

E.g.

class superclass(object): 
    def __init__(self, var1, var2): 
     self.var1 = var1 
     self.var2 = var2 

class subclass1(superclass): 
    def method1(self): 
     pass 

class subclass2(superclass): 
    def method1(self): 
     pass 

主不顯示,也沒有一個選項工廠,用於選擇子類調用,但希望給出的信息將是足夠的。

我希望將這些類轉換爲可導入的獨立模塊。 預計將來會編寫更多的子類,所以我想知道是否可以將每個子類和超類保存爲單獨的模塊,並且子類仍然能夠使用/訪問超類變量和定義。

這背後的推理是簡化任何未來的小類的寫作。這意味着它們可以作爲一個獨立的模塊來編寫,並且之前的子類和超類不必作爲開發的一部分被觸及,但它們仍然能夠使用超類變量和定義。

我不確定它會如何工作,或者是否可以這樣做。是否我只是將所有類保存爲superclass.py,subclass1.py和subclass2.py並將它們全部導入?????

希望有道理。

謝謝。

+0

類結構完全獨立於包結構:對於'class subclass1(superclass)'的情況,請注意''superclass' *只是一個表達式* - 只是確保它的計算結果爲所需的超類,這可能會需要導入或不需要。 (儘管敏感性通常決定了包的結構和類的層次結構是支持的)。 – 2011-11-23 03:42:03

回答

8

是的,它完全可能。只要不要忘記在子類文件中導入超類:

from module_where_superclass_is import SuperClass 

class SubClass(SuperClass): 

    def method1(self): 
     # ... 
+0

感謝所有的回覆,一旦你知道,總是很簡單:),不敢相信我沒有想過只是將超類導入到子類中。無法通過樹木看到森林。再次感謝,總是在stackoverflow上找到了很多人。 – user788462

+0

@ user788462,很高興幫助!有時候,最簡單的事情是難以理解的。如果我們解決了您的問題,請根據您接受的答案選擇最佳答案:) – juliomalegria

1

當然沒問題。你只是不喜歡它

import ModuleWithSuperclass 

class subclass1(ModuleWithSuperclass.superclass): 
    def method1(self): 
     pass 
1

在superclass.py:

class superclass(object): 
    def __init__(self, var1, var2): 
     self.var1 = var1 
     self.var2 = var2 

然後在subclass1.py:

from superclass import superclass 
class subclass1(superclass): 
    def method1(self): 
     pass 
1

你也可以繼承中存在的命名空間的任何類。

如果在一些奇怪的位置存在超類,你可以通過this answer

1

它添加到你的腳本,我建議你有python modules tutorial的讀取。它將爲您提供更多關於如何將您的課程安排到分層排列的模塊和包中的信息。

+0

我有一個模塊教程的快速瀏覽,但並未提前看到我在找什麼。我會給它更徹底的閱讀。 – user788462

4

是的,顯然這是可能的 - 這是蟒蛇的美麗!

模塊1

class base: 
    def p(self): 
     print "Hello Base" 

模塊2

from module1 import base 

class subclass(base): 
    def pp(self): 
     print "Hello child" 

Python Shell中

from module2 import subclass 
ob = subclass() 
ob.p() 
"Hello Base" 
ob.pp() 
"Hello child" 

:)

1

嗯,它一定會工作,但總是有一個。

例如,如果你從@juliomalegria使用的答案,你會發現它很難得到來自父母,這麼說,所有的子類在你的Python殼,如果你去:

from module_where_superclass_is import SuperClass 
SuperClass.__subclasses__() 

你什麼也得不到,除非你去:

from module_where_superclass_is import SubClass 
SuperClass.__subclasses__() 

然後你可以看到正確的結果出來。

相關問題