No veo lo que espero cuando uso ABCMeta y abstractmethod.Python 2.6, 3 malentendido de clase base abstracta
Esto funciona bien en python3:
from abc import ABCMeta, abstractmethod
class Super(metaclass=ABCMeta):
@abstractmethod
def method(self):
pass
a = Super()
TypeError: Can't instantiate abstract class Super ...
Y en 2.6:
class Super():
__metaclass__ = ABCMeta
@abstractmethod
def method(self):
pass
a = Super()
TypeError: Can't instantiate abstract class Super ...
Ambos también funcionan bien (me da la excepción esperada) si derivo Súper del objeto, además de ABCMeta.
Ambos "fallan" (sin excepción) si derivo Super de la lista.
Quiero que una clase base abstracta sea una lista, pero abstracta, y concreta en sub clases.
¿Lo estoy haciendo mal, o no debería querer esto en Python?
¿Qué intenta exactamente lograr con esto? Un ejemplo concreto realmente haría mucho por aquí. –
clases base abstractas son la desiderata de una mente envenenada o_O http://stackoverflow.com/questions/372042/difference-between-abstract-class-and-interface-in-python – msw
musicfreak: estoy tratando de lograr una lista basada en la clase base abstracta que define una interfaz para sus clases derivadas, y cuya clase base no puede ser instanciada. Quiero poder usar las clases derivadas como una lista porque esa es la naturaleza de mis objetos, con bits adicionales de interfaz porque mis objetos son mucho más especiales. :) msw: ¿Por qué desiderata ("algo deseado como esencial" de una mente envenenada? Supongo que estás diciendo que no debería querer esto (en python), pero ¿por qué? ¿Qué es un mecanismo más pitónico? – Aaron