Ich versuche, Python-Code in Scala-Code zu übersetzen. Ich bin also ein absoluter Neuling in Python.
Aber warum haben einige Klassen ein Objekt als Parameter, verwenden es jedoch nie explizit? Was ist der Grund dafür, dass es überhaupt ein Parameter ist?
Beispiel:
class Table(object)
Vielen Dank für Ihre Zeit.
Antworten:
In Python2 wird dies
Table
als Klasse neuen Stils deklariert (im Gegensatz zur "klassischen" Klasse). In Python3 sind alle Klassen Klassen neuen Stils, sodass dies nicht mehr erforderlich ist.Neue Stilklassen haben einige spezielle Attribute, die klassischen Klassen fehlen.
Auch Eigenschaften und Super nicht Arbeit mit klassischen Klassen.
In Python2 ist es eine gute Idee, alle Klassen im neuen Stil zu erstellen. (Obwohl viele Klassen in der Standardbibliothek aus Gründen der Abwärtskompatibilität immer noch klassische Klassen sind.)
Im Allgemeinen in einer Aussage wie
Foo
wird als Klasse deklariert, die von BasisklassenBase1
und erbtBase2
.object
ist die Mutter aller Klassen in Python. Es ist eine neuer Stil - Klasse, so erbenobject
machtTable
eine neuen Stil - Klasse.quelle
object
aus der Liste der Klassenbasen) im Tutorial gezeigt .object
. Die beiden Anweisungen zusammen bedeuten, dass Sie nichtobject
in die Liste der Klassenbasen in Python3 aufgenommen werden müssen, da alle Klassen in Python3 Klassen neuen Stils sind.Die
Table
Klasse erweitert eine Klasse namensobject
. Es ist kein Argument. Der Grund, warum Sie möglicherweiseobject
explizit erweitern möchten, besteht darin, dass die Klasse in eine Klasse neuen Stils umgewandelt wird. Wenn Sie nicht explizit angeben, dass esobject
bis Python 3 erweitert wird, handelt es sich standardmäßig um eine Klasse im alten Stil. (Seit Python 3 sind alle Klassen neu, unabhängig davon, ob Sie sie explizit erweiternobject
oder nicht.)Weitere Informationen zu Klassen neuen und alten Stils finden Sie in dieser Frage .
quelle
Nur eine Anmerkung, dass die Klassenunterscheidung "neuer Stil" gegen "alter Stil" spezifisch für Python 2.x ist; in 3.x sind alle Klassen "neuer Stil".
quelle
class Table und class Table (Objekt) unterscheiden sich für Python nicht.
Es ist kein Parameter, sondern erstreckt sich vom Objekt (das wie viele andere Sprachen die Basisklasse ist).
Es heißt nur, dass es alles erbt, was in "Objekt" definiert ist. Dies ist das Standardverhalten.
quelle
object
ist nur in Python 3 Standardverhalten. In Python 2 verfügt ein klassenerweiterendes Objekt über Attribute, die eine Klasse, die das Objekt nicht erweitert, nicht hat.object ist der Basistyp eines in Python definierten Klassenobjekts. Die Attribute des Objekts sind wie folgt zu sehen
** >>> dir (Objekt)
[ ' Klasse ', ' delattr ', ' doc ', ' Format ', ' getAttribute ', ' hash ', ' Init ', ' neu ', ' reduzieren ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ',' str ',' subclasshook '] **
Tabelle (Objekt) ist also nur Vererbung.!
quelle
1) Klassenname (Objekt): 2) Klassenname: Beide sind gleich, aber der erste ist in Bezug auf das Schreiben ziemlich besser. Er sieht besser aus, wenn andere Klassen an einen anderen geerbt werden. Er sieht homogen aus.
Wie gleich? Wenn also alles in Python unter Objekt fällt, bedeutet dies, dass alles in Python die Eigenschaft eines Objekts hat, wenn es geschrieben wird oder nicht, wird es es verstehen. Im ersten sagen wir es explizit, im zweiten haben wir es nicht gesagt.
quelle