我真的不知道你是什麼原因對試圖從所有其他較小的類創建一個更大的master
類繼承,但是,想到的第一件事是,設計可能會倒退。
您可能想要做的事情是擁有一個基類,您的所有命令模塊都可以繼承基類。可以使用包作爲智能名稱空間用於收集類似的功能,如「網絡」或「壓縮」等
class ToolBase(object):
# common functionality here
# class attributes
# base constructor
# methods: static, class, instance
pass
class Module1(ToolBase):
def __init__(self):
super(Module1, self).__init__()
class Module2(ToolBase):
def __init__(self):
super(Module2, self).__init__()
在該基類的例子,每個子類可以預期ToolBase的功能,以在那裏,包括任何從數據庫連接,套接字,資源等構造函數中進行設置。
也許一個項目結構是這樣的:
pyPackage
__init__.py
# class ToolBase
# __all__ = ['network', 'compress']
network/
__init__.py
module1.py
# class Module1
compress/
__init__.py
module2.py
# class Module2
更新
的方式來使用的基類,有一個共同的「端口」對象,你可以把一個一流水平屬性,只是初始化一次:
class ToolBase(object):
_PORT = None
def __init__(self):
if self._PORT is None:
self._PORT = "PORT"
@property
def port(self):
return self._PORT
class Foo(ToolBase):
def go(self):
print self.port
現在你的類是有用的,並將共享端口對象。
來源
2012-09-04 21:24:31
jdi
這聽起來像Java而不是Python代碼。例如。在Python中,你沒有'all'模塊(並且如果你想要一個'all'模塊,你可以使用'__init __。py')而你描述的是mixin。 – dav1d
抱歉,意味着導入*不是全部導入 與__init__中定義的__all__ –
然後沒有辦法做到這一點(如果你用'dir()'和'eval'忽略黑客)。 – dav1d