Tengo una superclase con un método que llama a otros métodos que solo están definidos en sus subclases. Por eso, cuando creo una instancia de mi superclase y llamo a su método, no puede encontrar el método y genera un error.Prevención de una clase de instanciación directa en Python
Aquí se muestra un ejemplo:
class SuperClass(object):
def method_one(self):
value = self.subclass_method()
print value
class SubClassOne(SuperClass):
def subclass_method(self):
return 'subclass 1'
class SubClassTwo(SuperClass):
def subclass_method(self):
return 'nubclass 2'
s1 = SubClassOne()
s1.method_one()
s2 = SubClassTwo()
s2.method_one()
c = SuperClass()
c.method_one()
# Results:
# subclass 1
# nubclass 2
# Traceback (most recent call last):
# File "abst.py", line 28, in <module>
# c.method_one()
# File "abst.py", line 4, in method_one
# value = self.subclass_method()
# AttributeError: 'SuperClass' object has no attribute 'subclass_method'
que estaba pensando en cambiar el init de superclase y verificar el tipo de objeto, cuando se crea una nueva instancia. Si el objeto pertenece a la superclase, genera un error. Sin embargo, no estoy muy seguro de si es la manera Pythonic de hacerlo.
¿Alguna recomendación?
La manera Pythonic es escribir buena documentación explicando cómo se usará su clase. – yak
@chown: esto se hace con bastante frecuencia en C++. Lo que está haciendo es esencialmente llamar a métodos virtuales. No hay nada inherentemente malo en ellos, si son la solución adecuada al problema. – rossipedia
Estoy de acuerdo en que no es muy Pythonic – rossipedia