2012-12-11 9 views
20

Powiel możliwe:
Old style and new style classes in Pythonklas w starym stylu i w nowym stylu w Pythonie 2.7?

Jaki jest obecny stan rzeczy z klas w nowym stylu i starego typu w Pythonie 2.7? Nie pracuję często z Pythonem, ale niejasno pamiętam problem. Dokumentacja w ogóle nie wspomina o problemie: The Python Tutorial: Classes. Czy nadal muszę się tym martwić? Ogólnie powinienem zadeklarować moje klasy jak:

class MyClass: 
    pass 

lub?

class MyClass(object): 
    pass 
+2

@LennartRegebro: które pytano w 2008 roku, zaakceptowana odpowiedź również w 2008 roku. Pytałem, jaka jest sytuacja w 2012 roku z Pythonem 2.7. Odpowiedź na to pytanie była dla mnie oczywista. – User

+0

Czy są jakieś powody, aby sądzić, że odpowiedź zmieniłaby się z Python 2.6 na Python 2.7? Chociaż to nie ma znaczenia. Niezależnie od powodów, dla których chcesz opublikować to pytanie, jest to dokładny duplikat. –

+0

@LennartRegebro: Tak 4 lata to dużo czasu, wiele może się zmienić. Nie zdawałem sobie sprawy, że Python 2.6 był 4 lata temu. – User

Odpowiedz

21

Zawsze podklasa "obiekt". To są klasy nowego stylu.

  • Jesteś gotowy dla Pythona 3 tej drodze.

  • Rzeczy takie jak .super() działają poprawnie w ten sposób, jeśli ich potrzebujesz.

+6

Nie wspominając już o dekoratorach metod ('@ property',' @ classmethod' i '@ staticmethod') działa tylko z klasami w nowym stylu. –

+3

Nie możesz zrobić "class MyClass:" w py3 i nadal jest to nowa klasa stylu? – GP89

+0

@ GP89: Tak, w Pythonie 3. –

9

Powinieneś zawsze używać nowych klas stylu. Klasy w nowym stylu są częścią starań, aby ujednolicić wbudowane typy i klasy zdefiniowane przez użytkownika w języku programowania Python.

zajęcia Nowe style mają kilka rzeczy do zaoferowania, takich jak:

  • Właściwości: Atrybuty, które są zdefiniowane przez get/set metod
  • metody statyczne i metod klasy
  • Nowy getAttribute hak, w przeciwieństwie do getattr, nazywa się dla każdego dostępu do atrybutu, a nie tylko wtedy, gdy atrybut nie może być znaleziony w instancji
  • Descriptors: Protokół aby zdefiniować zachowanie dostępu atrybutu przez obiekty
  • Zastępowanie konstruktora nowy
  • metaclasses

Source.

Powiązane problemy