2010-04-06 16 views

Odpowiedz

45

Krótko mówiąc, ustawia ona wolne magiczne kucyki.

W długiej wersji, Python 2.2 i wcześniejsze używały "klas starego stylu". Były szczególną implementacją klas i miały kilka ograniczeń (na przykład nie można było zbudować klasy podklasy). Rozwiązaniem tego było stworzenie nowego stylu klasy. Ale zrobienie tego wiązałoby się z pewnymi zmianami niekompatybilnymi wstecz. Tak więc, aby upewnić się, że kod napisany dla klas w starym stylu będzie nadal działał, klasa object została stworzona, aby działać jako nadklasa dla wszystkich klas w nowym stylu. W Pythonie 2.X, class Foo: pass utworzysz klasę starego stylu, a class Foo(object): pass utworzy nową klasę stylu.

Więcej informacji na ten temat można znaleźć w artykule Guido: Unifying types and classes in Python 2.2.

Ogólnie rzecz biorąc, dobrze jest wpaść w nawyk dokonywania wszystkich zajęć w nowym stylu, ponieważ niektóre rzeczy (dekorator @property jest tym, który przychodzi do głowy) nie będą działać z klasami starego stylu .

+0

@thetaiko wymienia kilka innych rzeczy w nowym stylu, o których warto wiedzieć. –

+2

Dla potomności warto wspomnieć, że klasy w nowym stylu są domyślne w Pythonie3, a podklasowanie 'obiektu' jest niepotrzebne. – slightlynybbled

3

Dobrze, ale oznacza to klasę jako klasa new-style. Nowo opracowane klasy powinny korzystać z bazy object, ponieważ kosztują one mało i na przyszłość kodu.

0

Krótka wersja jest taka, że ​​klasyczne klasy, które nie potrzebowały superklasy, miały ograniczenia, których nie można było obejść bez zerwania wielu starych kodów. Stworzyli więc koncepcję klas w nowym stylu, które mają podklasę od object, a teraz możesz robić fajne rzeczy, takie jak definiowanie właściwości, a podklasy dict nie są już ćwiczeniem bólu i dziwnych błędów.

Szczegóły znajdują się w punkcie 3.3 docs Pythona: New-style and classic classes.

0

Python 2.2 introduced "new style classes" który miał kilka dodatkowych funkcji w stosunku do dawnych klas styl, który nie podklasa obiektu. Obiekt Subclasses był wybranym sposobem wskazania, że ​​klasa powinna być klasą nowego stylu, a nie klasą starszą.