Frage Klasse mit Objekt als Parameter


Ich versuche, etwas Python-Code in Scala-Code zu übersetzen. Also ich bin ein totaler Noob in Python.

Aber warum haben einige Klassen ein Objekt als Parameter, aber benutzen es niemals explizit? Was ist der Grund dafür, es als Parameter überhaupt zu haben?

Beispiel:

class Table(object)

Vielen Dank für Ihre Zeit.


75
2017-09-11 00:39


Ursprung


Antworten:


In Python2 deklariert dies Table ein ... zu sein neue Klasse (im Gegensatz zur "klassischen" Klasse). In Python3 sind alle Klassen Klassen im neuen Stil, dies ist also nicht mehr notwendig.

Neue Stilklassen haben einige spezielle Attribute, die klassischen Klassen fehlen.

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__']

Ebenfalls, Eigenschaften und Super arbeite nicht mit klassischen Klassen.

In Python2 ist es eine gute Idee, alle Klassen zu neuen Stilklassen zu machen. (Obwohl viele Klassen in der Standardbibliothek aus Gründen der Abwärtskompatibilität immer noch klassische Klassen sind.)

Im Allgemeinen, in einer Aussage wie

class Foo(Base1, Base2):

Foo wird als eine Klasse deklariert, die von Basisklassen erbt Base1 und Base2.

object ist die Mutter aller Klassen in Python. Es ist eine Klasse neuen Stils, also erbt von object macht Table eine neue Stilklasse.


81
2017-09-11 00:46



Das Table Klasse erweitert eine Klasse namens object. Es ist kein Argument. Der Grund, warum Sie erweitern möchten object explizit wird die Klasse in eine Klasse neuen Typs umgewandelt. Wenn Sie dies nicht explizit angeben, wird erweitert objectBis Python 3 wird es standardmäßig eine alte Klasse sein. (Seit Python 3 sind alle Klassen neu, egal ob Sie explizit erweitern object oder nicht.)

Für weitere Informationen zu neuen und alten Klassen bitte Siehe diese Frage.


14
2017-09-11 00:42



Klasse Tabelle und Klasse Tabelle (Objekt) sind für Python nicht anders.

Es ist kein Parameter, es erstreckt sich von Objekt (das ist Basisklasse wie viele andere Sprachen).

Alles, was es sagt, ist, dass es alles erbt, was in "Objekt" definiert ist. Dies ist das Standardverhalten.


2
2017-09-11 00:42



Nur ein Hinweis, dass die Klassenunterschiede "neu-Stil" und "alt-Stil" spezifisch für Python 2.x sind, in 3.x sind alle Klassen "neu-Stil".


2
2017-09-11 10:17



Objekt ist der grundlegendste Typ des in Python definierten Klassenobjekts. Attribute von Objekten können wie folgt gesehen werden

** >>> dir (Objekt)

[''Klasse","Delat","Dok","Format","getattribute","Hash","drin","Neu","reduzieren","reduce_ex","repr","Setattr","Größe von","str","Unterklasse'] **

Also Tabelle (Objekt) ist nur Vererbung.!


1
2017-12-06 06:25



1) Klassenname (Objekt): 2) Klassenname: Sie sind beide gleich, aber die erste ist etwas besser in Bezug auf das Schreiben, es sieht besser aus, während andere Klassen zu einem anderen erben, es sieht homogen aus.

Wie gleich? Jede Sache in Python ist also unter Objekt zu verstehen bedeutet, dass alles in Python die Eigenschaft des Objekts hat, wenn schreiben oder nicht verstehen wird. In der ersten sagen wir es ausdrücklich in der Sekunde, die wir nicht taten.


0
2017-12-06 01:20