En la versión anterior de Python, cuando crea una clase en Python, puede heredar de un objeto que, según entiendo, es un elemento especial de Python incorporado que permite que su objeto sea un objeto de nuevo estilo.
¿Qué pasa con la versión más reciente (> 3.0 y 2.6)? Busqué en Google sobre el objeto de clase, pero obtengo muchos resultados (por razones obvias). ¿Alguna pista?
¡Gracias!
python
python-3.x
Thomas
fuente
fuente
Respuestas:
No es necesario heredar de
object
para tener un nuevo estilo en Python 3. Todas las clases son de nuevo estilo.fuente
object
independientemente de si se escribe explícitamente(object)
o no en Python 3.1Me doy cuenta de que esta es una pregunta antigua, pero vale la pena señalar que incluso en Python 3 estas dos cosas no son exactamente lo mismo.
Si hereda explícitamente de
object
, lo que en realidad está haciendo es heredar debuiltins.object
independientemente de lo que eso apunte en ese momento.Por lo tanto, podría tener algún módulo (muy loco) que anule el objeto por alguna razón. Llamaremos a este primer módulo "newobj.py":
import builtins old_object = builtins.object # otherwise cyclic dependencies class new_object(old_object): def __init__(self, *args, **kwargs): super(new_object, self).__init__(*args, **kwargs) self.greeting = "Hello World!" builtins.object = new_object #overrides the default object
Luego, en otro archivo ("klasses.py"):
class Greeter(object): pass class NonGreeter: pass
Luego, en un tercer archivo (que realmente podemos ejecutar):
import newobj, klasses # This order matters! greeter = klasses.Greeter() print(greeter.greeting) # prints the greeting in the new __init__ non_greeter = klasses.NonGreeter() print(non_greeter.greeting) # throws an attribute error
Entonces, puede ver que, en el caso de que herede explícitamente de un objeto, obtenemos un comportamiento diferente al que permite la herencia implícita.
fuente