it-swarm.it

Classe con oggetto come parametro

Sto provando a tradurre qualche codice Python in scala codice. Quindi sono un noob totale in Python. 

Ma perché alcune classi hanno come parametro un oggetto ma non lo usano mai esplicitamente? Qual è il motivo per averlo come parametro in primo luogo?

Esempio:

class Table(object)

Grazie per il tuo tempo.

85

In Python2 questo dichiara Table come una classe new-style (in opposizione alla classe "classic") . In Python3 tutte le classi sono classi new-style, quindi non è più necessario.

Le nuove classi di stile hanno alcuni attributi speciali che mancano alle classi classiche.

class Classic: pass
class NewStyle(object): pass

print(dir(Classic))
# ['__doc__', '__module__']

print(dir(NewStyle))
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Inoltre, properties e super non funzionano con le classi classiche.

In Python2 è una buona idea rendere tutte le classi classi di nuovo stile. (Anche se molte classi nella libreria standard sono ancora classi classiche, per motivi di compatibilità con le versioni precedenti).

In generale, in una dichiarazione come

class Foo(Base1, Base2):

Foo viene dichiarata come una classe che eredita dalle classi di base Base1 e Base2.

object è la madre di tutte le classi in Python. È una classe di nuovo stile, quindi ereditare da object rende Table una classe di nuovo stile.

90
unutbu

La classe Table sta estendendo una classe chiamata object. Non è una discussione. La ragione per cui si desidera estendere object in modo esplicito è che trasforma la classe in una classe di nuovo stile. Se non specifichi esplicitamente, estende object, fino a Python 3, per impostazione predefinita si tratta di una classe vecchio stile. (Da Python 3, tutte le classi sono in stile nuovo, indipendentemente dal fatto che si estenda esplicitamente object oppure no.)

Per ulteriori informazioni sulle classi vecchio stile e vecchio stile, per favore vedi questa domanda .

15
icktoofay

Solo una nota che la distinzione di classe "new-style" rispetto a "old-style" è specifica per Python 2.x; in 3.x, tutte le classi sono "new-style".

3

classe Tabella e classe Tabella (oggetto) non sono diversi per Python.

Non è un parametro, si estende dall'oggetto (che è una classe base come molte altre lingue).

Tutto ciò che dice è che eredita tutto ciò che è definito in "oggetto". Questo è il comportamento predefinito.

2
Devraj

object è il tipo più base di oggetto classe definito in python . Gli attributi dell'oggetto possono essere visti come sotto

** >>> dir (oggetto)

[' class ', ' delattr ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ',' new ',' reduce ',' reduce_ex ',' repr ',' setattr ',' sizeof ',' str ',' subclasshook '] **

Quindi la tabella (oggetto) è solo ereditaria.!

1) Nome classe (oggetto): 2) nome classe: Entrambi sono uguali ma il primo è piuttosto migliore in termini di scrittura, ha un aspetto migliore mentre eredita altre classi in un'altra, non sembra omogeneo.

Come lo stesso?. Quindi, ogni cosa in Python è sotto l'oggetto significa che ogni cosa in Python ha la proprietà dell'oggetto, se scrivi o non lo capirà ... In primo luogo lo diciamo esplicitamente in secondo 't.

0
Ravi Shankar