Todas las clases derivadas de una cierta clase base tienen que definir un atributo llamado "ruta". En el sentido de la tipificación de pato que podía confiar en la definición de las subclases:Pasando el parámetro al constructor de la clase base o usando la variable de instancia?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
Otra posibilidad sería utilizar el constructor de la clase base:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
que usar Python 3.1.
¿Qué preferirías y por qué? ¿Hay una mejor manera?
No hay nada frágil sobre 'super()'. La fragilidad está en la sintaxis 2.x, que está fija en 3.x (que el OP está utilizando, como se muestra mediante la llamada 'super()'), y la herencia múltiple en general. No hay ninguna razón para llamar al método baseclass directamente en Python 3.x, la sintaxis 'super() .__ init (...)' nunca es peor y, a menudo, mejor. –
juzgando por el uso de 'super', supongo que Deamon está usando py3k – SilentGhost
@Thomas Wouters: ¿cómo usarías super si todas las clases de herencia múltiple y base con diferentes firmas de constructor? Pasar todos los argumentos de las clases derivadas a todas las clases base parece un truco sucio, confiar en los parámetros nombrados y dejar que las clases base resuelvan lo que necesitan no es mucho mejor. – kriss