【发布时间】:2016-09-28 13:35:28
【问题描述】:
我在 Python 中有一个简单的 mixin 结构。代码应该很不言自明:
class Base:
def __init__(self):
pass
class MixinA:
def __init__(self):
self.x = 0
self.y = 1
def a(self):
print('A: x = ' + str(self.x) + ', y = ' + str(self.y))
class MixinB:
def __init__(self):
self.x = 2
self.z = 3
def b(self):
print('B: x = ' + str(self.x) + ', z = ' + str(self.z))
class MyFirstMix(MixinA, MixinB, Base):
def __init__(self):
Base.__init__(self)
MixinB.__init__(self)
MixinA.__init__(self)
class MySecondMix(MixinA, Base):
def __init__(self):
Base.__init__(self)
MixinA.__init__(self)
我想稍微改进一下,所以这会导致 3 个问题/问题:
-
MixinA和MixinB都有一个成员x。有没有办法确保每个班级只看到自己的 x?据我所知:不,没有。 - 为混合类中的每个mixin调用构造函数有点麻烦。有没有办法自动调用所有的构造函数或做一些具有相同效果的事情?
- 有没有一种方法可以在不显式创建类的情况下动态地在线混合某些内容?我正在寻找类似的语法:
mix = Base() with MixinA
如果我提议的结构完全错误,我也愿意接受有关如何处理 mixins 的其他建议。
【问题讨论】:
-
Prevent function overriding in Python 的可能重复项。您可以使用此处提到的类似技术来防止实例属性被覆盖。
-
@NoctisSkytower:那么,问题 2 和问题 3 是怎么回事?
-
这些可以并且可能应该作为单独的问题发布。