2009-08-06 2 views
48

W starszej wersji Pythona, gdy tworzysz klasę w pythonie, może ona dziedziczyć po obiekcie, który rozumiem jako specjalny wbudowany element python, który pozwala twojemu obiektowi być obiektem w nowym stylu.Czy jest to konieczne lub przydatne do dziedziczenia z obiektu Pythona w Pythonie 3.x?

Co z nowszą wersją (> 3.0 i 2.6)? Szukałem informacji o obiekcie klasy, ale otrzymałem tak wiele wyników (z oczywistych powodów). Jakaś wskazówka?

Dziękujemy!

+2

Jeśli twój kod będzie również używany w wersji 2.x, dobrze jest być wyraźnym. – smci

Odpowiedz

39

Nie musisz dziedziczyć po object, aby mieć nowy styl w Pythonie 3. Wszystkie klasy są w nowym stylu.

+0

Dziękuję :) Przejrzałem książkę online (bajt Pyhtona) i wiele dokumentów pythona, ale nigdy nie znalazłem mojej odpowiedzi wyraźnie ... – thomas

+0

Co z Pythonem 2.6? – luc

+3

python 2.6 zachowuje się jak python 2.x – SilentGhost

22

Zdaję sobie sprawę, że jest to stare pytanie, ale warto zauważyć, że nawet w pytonie 3 te dwie rzeczy nie są tym samym.

Jeśli jawnie dziedziczą object, co się faktycznie robi dziedziczy z builtins.objectniezależnie od tego, że wskazuje na czasie.

Dlatego mógłbym mieć (bardzo zwariowany) moduł, który z jakiegoś powodu unieważnia obiekt. Zadzwonimy Pierwszy moduł "newobj.py":

import builtins 

old_object = builtins.object # otherwise cyclic dependencies 

class new_object(old_object): 

    def __init__(self, *args, **kwargs): 
     super(new_object, self).__init__(*args, **kwargs) 
     self.greeting = "Hello World!" 

builtins.object = new_object #overrides the default object 

Potem w jakiś inny plik ("klasses.py"):

class Greeter(object): 
    pass 

class NonGreeter: 
    pass 

Potem w trzecim pliku (który możemy rzeczywiście uruchomić):

import newobj, klasses # This order matters! 

greeter = klasses.Greeter() 
print(greeter.greeting) # prints the greeting in the new __init__ 

non_greeter = klasses.NonGreeter() 
print(non_greeter.greeting) # throws an attribute error 

Więc widać, że w przypadku, gdy jest to wyraźnie dziedziczy z obiektu, mamy inne zachowanie niż gdzie pozwalają na niejawny dziedziczenia.

+4

Awansuj na szaleństwo! Niesamowite myśli! –