Tutti i built-in Python sono sottoclassi di object
e trovo anche molte classi definite dall'utente. Perché? Qual è lo scopo della classe object
? È solo una lezione vuota, giusto?Qual è lo scopo della sottoclasse della classe "oggetto" in Python?
risposta
In breve, imposta pony magici gratuiti.
A lungo, Python 2.2 e precedenti utilizzavano "classi di vecchio stile". Erano una particolare implementazione di classi e avevano alcune limitazioni (ad esempio, non si poteva sottoclasse i tipi built-in). La soluzione per questo era di creare un nuovo stile di classe. Tuttavia, ciò comporterebbe alcune modifiche incompatibili all'indietro. Quindi, per assicurarti che il codice scritto per le classi di vecchio stile continui a funzionare, la classe object
è stata creata per fungere da superclasse per tutte le classi di nuovo stile. Quindi, in Python 2.X, class Foo: pass
creerà una classe vecchio stile e class Foo(object): pass
creerà una nuova classe di stile.
Più a lungo, vedere Unifying types and classes in Python 2.2 di Guido.
E, in generale, è una buona idea prendere l'abitudine di rendere tutte le tue lezioni in stile nuovo, perché alcune cose (il decoratore @property
è quello che ti viene in mente) non funzioneranno con le classi vecchio stile .
Giusto, ma segna la classe come classe new-style. Le classi di recente sviluppo dovrebbero utilizzare la base object
perché costa poco e rende a prova di futuro il codice.
Ha a che fare con il "nuovo stile" delle classi. Si può leggere di più su di esso qui: http://docs.python.org/tutorial/classes.html#multiple-inheritance e anche qui: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
Utilizzando classi di nuovo stile vi permetterà di utilizzare "più recenti, funzioni versatili di Python come __slots__, descrittori, proprietà, e __getattribute __()."
La versione breve è che le classi classiche, che non avevano bisogno di una superclasse, avevano limitazioni che non potevano essere aggirate senza infrangere un sacco di vecchio codice. Così hanno creato il concetto di classi new-style che sottoclasse da object
, e ora puoi fare cose interessanti come definire le proprietà, e la sottoclasse dict
non è più un esercizio di dolore e di strani bug.
I dettagli sono nella sezione 3.3 dei documenti Python: New-style and classic classes.
Python 2.2 introduced "new style classes" che aveva una serie di funzionalità aggiuntive relative alle vecchie classi di stile che non ha fatto oggetto sottoclasse. L'oggetto delle sottoclassi era il modo scelto per indicare che la classe dovrebbe essere una nuova classe di stile, non una di classe precedente.
Risposta breve: sottoclasse object
rende effettivamente un nuovo stile di classe (notare che questa è necessaria in quanto automatica in Python 3.x)
Per la differenza tra new style
classi e old style
classi: vedi this stackoverflow question. Per la storia completa: vedi this nice writeup on Python Types and Objects.
@thetaiko elenca alcune altre novità di solo stile che sono utili a conoscere. –
Per i posteri, vale la pena ricordare che le classi di nuovo stile sono di default in Python3 e la sottoclasse di 'object' non è necessaria. – slightlynybbled