使模块使用派生 class?
Make a module use a derived class?
我正在尝试扩展模块功能。该模块包含一个 class (BaseContainer
),它包含同一模块中另一个 class (BaseObject
) 的成员实例。我想扩展两个 classes。但是 BaseContainer
似乎在使用 BaseObject
而不是扩展派生对象。
编辑:尝试重组项目。同样的结果
foo/
__init__.py
bar/
__init.py__
from .BaseModule import BaseObject
from .BaseModule import BaseContainer
BaseModule.py
class BaseObject:
def __init__(self):
self.aMember = True
class BaseContainer:
def __init__(self):
self.myObject = BaseObject()
DerivedModule.py
from . import BaseModule
class DerivedObject(BaseModule.BaseObject):
def __init__(self):
BaseObject.__init__(self)
self.derivedMember = True
class DerivedContainer(BaseContainer):
def __init__(self):
BaseContainer.__init__(self)
Other code
但是如果我实例化一个 DerivedContainer
,它的 myObject
没有 derivedMember
。
我对这个结果并不感到惊讶,基本模块不知道 DerivedContainer
是有道理的。但是有办法解决这个问题吗?
在DerivedModule.py
末尾添加:
BaseModule.BaseObject = DerivedObject
注意:如果你这样做那么其他模块也会得到DerivedObject
而不是BaseObject
。
我正在尝试扩展模块功能。该模块包含一个 class (BaseContainer
),它包含同一模块中另一个 class (BaseObject
) 的成员实例。我想扩展两个 classes。但是 BaseContainer
似乎在使用 BaseObject
而不是扩展派生对象。
编辑:尝试重组项目。同样的结果
foo/
__init__.py
bar/
__init.py__
from .BaseModule import BaseObject
from .BaseModule import BaseContainer
BaseModule.py
class BaseObject:
def __init__(self):
self.aMember = True
class BaseContainer:
def __init__(self):
self.myObject = BaseObject()
DerivedModule.py
from . import BaseModule
class DerivedObject(BaseModule.BaseObject):
def __init__(self):
BaseObject.__init__(self)
self.derivedMember = True
class DerivedContainer(BaseContainer):
def __init__(self):
BaseContainer.__init__(self)
Other code
但是如果我实例化一个 DerivedContainer
,它的 myObject
没有 derivedMember
。
我对这个结果并不感到惊讶,基本模块不知道 DerivedContainer
是有道理的。但是有办法解决这个问题吗?
在DerivedModule.py
末尾添加:
BaseModule.BaseObject = DerivedObject
注意:如果你这样做那么其他模块也会得到DerivedObject
而不是BaseObject
。