Wszystkie wbudowane w Python podklasy to object
i napotykam wiele klas zdefiniowanych przez użytkownika, które również są. Czemu? Jaki jest cel klasy object
? To tylko pusta klasa, prawda?Jaki jest cel podklasy klasy "obiekt" w Pythonie?
Odpowiedz
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 .
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.
Ma to związek z "nowym stylem" zajęć. Możesz przeczytać więcej na ten temat tutaj: http://docs.python.org/tutorial/classes.html#multiple-inheritance i również tutaj: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
Korzystanie z klas nowego stylu pozwoli Ci używać „nowsze, wszechstronne funkcje Pythona jak __slots__, opisów, właściwości i __getattribute __().”
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.
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ą.
Krótka odpowiedź: instacji object
skutecznie sprawia, że nowy styl klasa (zauważ, że jest to konieczne, ponieważ automatyczne w Pythonie 3.x)
Dla różnicy pomiędzy new style
klas i old style
klas: patrz this stackoverflow question. Pełna historia: patrz this nice writeup on Python Types and Objects.
- 1. Jaki jest cel klasy Expression?
- 2. Jaki jest cel porównywania indeksów w Pythonie?
- 3. Jaki jest cel klasy TestExecution w MSTest?
- 4. Jaki jest cel wpisywania klasy w C++?
- 5. Jaki jest cel modułu ładującego klasy Java?
- 6. Jaki jest cel używania?
- 7. Jaki jest cel $ w XSLT
- 8. Jaki jest cel Mage_Core_Block_Template_Facade
- 9. Sprawdź, czy obiekt jest instancją danej klasy lub podklasy nim
- 10. Jaki jest cel __str__ i __repr__?
- 11. Jaki jest cel atrybutu PermissionSet w przykładzie klasy MSDN FileSystemWatcher?
- 12. jaki jest cel Thread.holdsLock (blokada)?
- 13. Jaki jest cel IApplicationBuilder.New()
- 14. Jaki jest cel curdoc()?
- 15. Jaki jest cel aclocal?
- 16. Jaki jest cel XNoImplicitPrelude?
- 17. Jaki jest cel Ember.Container
- 18. Jaki jest cel ldexp?
- 19. Jaki jest cel Rake?
- 20. Jaki jest cel HttpHeaders.TryAddWithoutValidation?
- 21. Jaki jest cel CMakeScripts?
- 22. Jaki jest cel preompompiledApp.config?
- 23. Jaki jest cel "() =>"
- 24. Jaki jest cel vertexAttribPointer?
- 25. Jaki jest cel JNDI
- 26. Jaki jest cel IAsyncStateMachine.SetStateMachine?
- 27. Jaki jest cel layout.xml?
- 28. Jaki jest cel `__metaclass__ = type`?
- 29. Jaki jest cel w itertools.theat Pythona?
- 30. Jaki jest cel posiadania powiązanego odwołania do klasy typu kowariantu?
@thetaiko wymienia kilka innych rzeczy w nowym stylu, o których warto wiedzieć. –
Dla potomności warto wspomnieć, że klasy w nowym stylu są domyślne w Pythonie3, a podklasowanie 'obiektu' jest niepotrzebne. – slightlynybbled