Domanda

Tutti i Python built-in sono sottoclassi di object e mi imbatto in molte classi definite dall'utente che sono troppo. Perché? Qual è lo scopo della object classe? E 'solo una classe vuota, giusto?

È stato utile?

Soluzione

In breve, esso imposta pony magici liberi.

A lungo, Python 2.2 e le "classi di stile vecchi" in precedenza utilizzati. Erano una particolare implementazione di classi, e hanno avuto alcune limitazioni (ad esempio, non si poteva sottoclasse builtin tipi). La correzione di questo è stato quello di creare un nuovo stile di classe. Ma, facendo questo comporterebbe alcuni cambiamenti retro-compatibili. Quindi, per assicurarsi che il codice che è scritto per le classi vecchio stile continuerà a funzionare, la classe object è stata creata per fungere da superclasse per tutte le classi di nuovo stile. Così, in Python 2.X, class Foo: pass creerà una classe di vecchio stile e class Foo(object): pass creerà una nuova classe di stile.

In più, vedere di Guido tipi Unificare e classi in Python 2.2 .

E, in generale, è una buona idea quella di prendere l'abitudine di fare tutte le classi di nuovo stile, perché alcune cose (il decoratore @property è uno che viene in mente) non funziona con le classi vecchio stile.

Altri suggerimenti

Risposta breve: sottoclasse object rende effettivamente un new-style di classe (nota che questo è necessaria in quanto automatica in Python 3.x)

Per la differenza tra le classi e le classi new style old style: vedi questo StackOverflow interrogare . Per la storia completa: vedi questo interessante resoconto sui Tipi Python e oggetti

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-eredità e anche qui: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

Utilizzando classi di nuovo stile vi permetterà di utilizzare "di Python più recente, versatili caratteristiche come __slots__, descrittori, proprietà, e __getattribute __ ()".

A destra, ma segna la classe come un nuovo stile di classe . Recentemente classi sviluppati dovrebbero utilizzare la base object perché costa poco e prova di futuro, il vostro codice.

La versione breve è che le classi classiche, che non hanno bisogno di una superclasse, avevano limitazioni che non poteva essere risolto senza rompere un sacco di vecchio codice. Così hanno creato il concetto di classi di nuovo stile che sottoclasse da object, e ora si possono fare cose interessanti come definire le proprietà, e sottoclasse dict non è più un esercizio di dolore e di strani insetti.

I dettagli sono nella sezione 3.3 dei documenti Python: Nuovo- stile e classi classiche.

Python 2.2 ha introdotto "nuove classi di stile" che aveva una serie di funzionalità aggiuntive relative alle vecchie classi di stile che non ha fatto oggetto sottoclasse. Le sottoclassi oggetto era il modo scelto per indicare che la classe dovrebbe essere una nuova classe di stile, non un vecchio stile uno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top