Próbuję przetłumaczyć kod Pythona na kod Scala. Więc jestem totalnym noobem w Pythonie.
Ale dlaczego niektóre klasy mają obiekt jako parametr, ale nigdy nie używają go jawnie? Jaki jest powód, dla którego jest to parametr w pierwszej kolejności?
Przykład:
class Table(object)
Dziękuję za Twój czas.
Odpowiedzi:
W Pythonie2 deklaruje to, że
Table
jest to klasa w nowym stylu (w przeciwieństwie do klasy „klasycznej”). W Pythonie3 wszystkie klasy są klasami w nowym stylu, więc nie jest to już konieczne.Nowe klasy stylu mają kilka specjalnych atrybutów, których brakuje klasycznym klasom.
Również właściwości i super nie działają z klasycznymi klasami.
W Pythonie2 dobrym pomysłem jest uczynienie wszystkich klas klasami w nowym stylu. (Chociaż wiele klas w bibliotece standardowej to nadal klasy klasyczne, ze względu na kompatybilność wsteczną).
Ogólnie w stwierdzeniu takim jak
Foo
jest deklarowana jako klasa dziedzicząca po klasach bazowychBase1
iBase2
.object
jest matką wszystkich klas w Pythonie. Jest to klasa w nowym stylu, więc dziedziczenie poobject
tworzyTable
klasę w nowym stylu.źródło
object
na liście baz klas) w samouczku .object
. Te dwie instrukcje razem sugerują, że nie ma potrzeby umieszczania ichobject
na liście baz klas w Pythonie3, ponieważ wszystkie klasy są klasami nowego stylu w Python3.Table
Klasa rozszerza klasę o nazwieobject
. To nie jest argument. Powodem, dla którego możesz chciećobject
jawnie rozszerzyć, jest zamiana klasy w klasę w nowym stylu. Jeśli nie określisz jawnie extendsobject
, aż do Pythona 3, domyślnie będzie to klasa w starym stylu. (Od Pythona 3 wszystkie klasy są w nowym stylu, niezależnie od tego, czy jawnie rozszerzasz,object
czy nie).Aby uzyskać więcej informacji na temat klas w nowym i starym stylu, zobacz to pytanie .
źródło
Wystarczy zauważyć, że różnica między klasami „w nowym stylu” a klasami „w starym stylu” jest charakterystyczna dla języka Python 2.x; w wersji 3.x wszystkie klasy są „w nowym stylu”.
źródło
class Table i class Table (obiekt) nie różnią się od Pythona.
To nie jest parametr, jest rozszerzany z obiektu (który jest klasą bazową, podobnie jak wiele innych języków).
Mówi tylko, że dziedziczy wszystko, co jest zdefiniowane w „obiekcie”. To jest zachowanie domyślne.
źródło
object
jest zachowaniem domyślnym tylko w Pythonie 3. W Pythonie 2 obiekt rozszerzający klasę ma atrybuty, których nie będzie miała klasa, która nie rozszerza obiektu.object jest najbardziej podstawowym typem obiektu klasy zdefiniowanym w Pythonie. Atrybuty obiektu można zobaczyć jak poniżej
** >>> reż (obiekt)
[„ klasa ”, „ delattr ”, „ doc ”, „ format ”, „ getattribute ”, „ hash ”, „ init ”, „ nowy ”, „ redukuj ”, „ redukuj_ex ”, „ repr ”, „ setattr ”, „ sizeof ',' str ',' subclasshook '] **
Więc tabela (obiekt) jest po prostu dziedziczeniem.!
źródło
1) Nazwa klasy (obiekt): 2) nazwa klasy: Obie są takie same, ale najpierw jedna znacznie lepsza pod względem pisania, lepiej wygląda dziedzicząc inne klasy do innej, wygląda jednorodnie.
Jak to samo? Zatem każda rzecz w Pythonie jest objęta obiektem oznacza, że każda rzecz w Pythonie ma właściwość obiektu, jeśli napiszesz lub nie, zrozumie to. W pierwszej wyraźnie to powiedzieliśmy, w drugiej nie.
źródło