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.
- 1. Qual è lo scopo della classe Expression?
- 2. Qual è lo scopo della classe Applicaton in Android
- 3. Qual è lo scopo della trasmissione in tipo "oggetto"?
- 4. Qual è lo scopo della classe TestExecution in MSTest?
- 5. Qual è lo scopo dell'estensione della classe serializzabile Java?
- 6. Qual è lo scopo della lente unita?
- 7. Qual è lo scopo della serratura?
- 8. Qual è lo scopo della chiamata super() nelle sottoclassi TS?
- 9. Qual è lo scopo della dichiarazione anticipata?
- 10. Qual è lo scopo della tabella di collegamento della procedura?
- 11. Qual è lo scopo della parola chiave "base" in C#?
- 12. Qual è lo scopo della finalizzazione in Java?
- 13. Qual è lo scopo della serializzazione in Java?
- 14. Qual è lo scopo della proprietà webkitRelativePath nell'oggetto File?
- 15. Qual è lo scopo della lista <Void>?
- 16. Qual è lo scopo della parola chiave `external` in Kotlin?
- 17. Qual è lo scopo della parola chiave volatile in C#?
- 18. Qual è lo scopo della Tupla (T1)/Singleton in .net?
- 19. Qual è lo scopo della proprietà "privato" in package.json?
- 20. Qual è lo scopo della parola chiave 'volatile' in C#
- 21. Java: Qual è lo scopo della setDoInput in URLConnection
- 22. Qual è lo scopo della struttura delle bandiere in iOS?
- 23. Qual è lo scopo principale della proprietà List.single?
- 24. Qual è lo scopo della proprietà FormsAuthenticationTicket isPersistent?
- 25. Qual è lo scopo della onTablet e onDesktop attributi HTML
- 26. Qual è lo scopo della BlockingCollection (Of T)
- 27. RequireJS - Qual è lo scopo della proprietà "exports" nello shim
- 28. Qual è lo scopo della FilterConfig.RegisterGlobalFilters (GlobalFilters.Filters) all'interno Global.asax
- 29. Qual è lo scopo della cartella buildSrc di gradle?
- 30. Qual è lo scopo della parola chiave SQL "AS"?
@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