[英]Abstract class + mixin + multiple inheritance in python
所以,我认为代码可能解释了我想要做的比我言语更好,所以这里是:
import abc
class foo(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def bar(self):
pass
class bar_for_foo_mixin(object):
def bar(self):
print "This should satisfy the abstract method requirement"
class myfoo(foo, bar_for_foo_mixin):
def __init__(self):
print "myfoo __init__ called"
self.bar()
obj = myfoo()
结果:
TypeError: Can't instantiate abstract class myfoo with abstract methods bar
我正在尝试使用mixin类来满足abstract / interface类的要求。 我错过了什么?
我认为(在类似情况下测试)逆转基类工作:
class myfoo(bar_for_foo_mixin, foo):
def __init__(self):
print "myfoo __init__ called"
self.bar()
所以在mro()中它会在找到抽象的之前找到bar()的具体版本。 不知道这是否实际上是在后台发生的事情。
干杯,拉尔斯
PS:在python 2.7中工作的代码(python 3有不同的设置元类的方法)是:
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do(self):
pass
class B(object):
def do(self):
print "do"
class C(B, A):
pass
c = C()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.