Python comportamiento diferente con método abstracto
Tengo dos clases que heredan del mismo padreP
:
from abc import ABCMeta, abstractmethod
class P(object):
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
class C(P):
pass
class D(tuple, P):
pass
La única diferencia es queD
heredado detuple
yP
mientrasC
hereda deP
solamente.
Ahora este es el comportamiento:c = C()
tiene error, como se esperaba:
TypeError: Can't instantiate abstract class C with abstract methods foo
perod = D()
funciona sin error!
Incluso puedo llamard.foo()
. ¿Cómo puedo explicar este comportamiento?