我想提交一个我经常在python代码中看到的代码模式,在这里工作,我对它不满意,我想要一个更好的解决方案。在
以下是我们今天的情况:
class AbstractClass(object):
....
def method1(self,...)
raise NotImplementedError
...
class FirstImplementationMixin(object)
def method1(self,....)
...
class SecondImplementationMixin(object)
def method1(self...)
....
class InstanciatedClass1(FirstImplementationMixin, AbstractClass)
....
class InstanciatedClass2(SecondImplementationMixin, AbstractClass)
....
你明白窍门了吗?我得把混音放在列表的第一位 我不喜欢这个解决方案。如果我们在第二个位置加上它,解释器将使用抽象类方法1所以提出例外。在
在这种简单的情况下,用中间类替换mixin是可能的,但是在已经有基类的复杂继承的情况下,解决方案可能并不明显。在
对你来说最好的设计模式是什么?在
好吧,正如我在评论中提到的,这就是Python的工作方式,我不认为改变它是个好主意。在
尽管如此,metaclasses去救他!
您可以创建自己的元类,并根据需要使其复杂化。在这里我将向您展示一个非常基本的例子。在
它只是将第一个基类移到最后,所以现在您将实际的基类放在第一位,然后是所有的mixin。这意味着您只能使用一个基类。您可以通过某种约定来解除这个限制,例如,您将首先列出基类,然后}并相应地重新排列元组。在
^{pr2}$None
,然后mixin;您的元类将查找这个{当然,您不会每次都指定
__metaclass__
,因为用于选择元类的规则。您可能会在模块级别或mixin中设置__metaclass__
。这是你的选择,任何更适合你的代码结构。在相关问题 更多 >
编程相关推荐