2010-04-06 14 views

risposta

45

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 .

+0

@thetaiko elenca alcune altre novità di solo stile che sono utili a conoscere. –

+2

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

3

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.

0

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.

0

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.

Problemi correlati