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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta