voglio definire un mix-in di un namedtuple e una classe base con definisce e abstract method:Mix-in di classe astratta e namedtuple
import abc
import collections
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do(self):
print("U Can't Touch This")
B = collections.namedtuple('B', 'x, y')
class C(B, A):
pass
c = C(x=3, y=4)
print(c)
c.do()
Da quello che ho capito leggendo i documenti e other examples I have seen, c.do()
dovrebbe genera un errore, in quanto la classe C non implementa do()
. Tuttavia, quando lo eseguo ... funziona:
B(x=3, y=4)
U Can't Touch This
Devo trascurare qualcosa.
Quale versione di python stai usando? I metaclassi sono invocati in modi diversi e incompatibili in python 2 versus python 3. Se stai usando python 3, la tua classe non è in realtà una classe astratta. – Dunes
Ho provato questo con entrambi Python 2 e 3. Stesso comportamento. – plok