Aquí es mi conjetura, que no funciona:¿Cómo puede una clase base de Python decir si una subclase ha anulado sus métodos?
class BaseClass(object):
def foo(self):
return 'foo'
def bar(self):
return 'bar'
def methods_implemented(self):
"""This doesn't work..."""
overriden = []
for method in ('foo', 'bar'):
this_method = getattr(self, method)
base_method = getattr(BaseClass, method)
if this_method is not base_method:
overriden.append(method)
return overriden
class SubClass(BaseClass):
def foo(self):
return 'override foo'
o = SubClass()
o.methods_implemented()
Idealmente, methods_implemented() devolvería [ 'foo'].
¿Cómo?
(¿Por qué querría hacer esto? Mi clase base es una clase de recursos HTTP que tiene métodos GET, POST, etc. Por defecto, devuelven 405 Method Not Implemented. También tiene un método OPTIONS que debería devolver 200 respuestas con el encabezado Permitir establecer los métodos que implemente cualquier subclase.)
¿Por qué es esto una wiki de la comunidad? –
No estoy seguro de por qué querría hacer esto. En cualquier jerarquía de clases, no se debe exigir a una clase base que sepa algo sobre las clases derivadas. Si esto es necesario, ** tal vez ** su diseño debe ser reconsiderado. – Steg
Acepto que esto no debería ser wiki: habrá una respuesta que funcione y pueda ser aceptada. Además, me gustaría saber más acerca de por qué quieres hacer esto, no porque no debas, sino porque parece una de esas soluciones a un problema que tiene una solución mejor y más diferente en otro lugar. –