2012-11-23 28 views
9

Jestem nowy w Pythonie. Jestem zaznajomiony z Javą, C/C++ i OCaml. Rozumiem Rachunek Lambda i elementarną Teorię Rodzaju z powodu kursu Języków Programistycznych, który odbyłem na Uniwersytecie.Python Type System - Object vs Type

Uzbrojony tym tle, starałem się przeczytać - http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html

Gdzieś, wspomina tak:

  • (typ 'Obiekt') jest instancją (typ 'typ')
  • (wpisz 'object') jest podklasą bez obiektu.
  • (typ "typ") jest instancją samą w sobie.
  • (type'type ') jest podklasą (typu 'obiektu')

nie jestem w stanie owinąć mój biedny mózg wokół to:

  • (typ 'Obiekt') jest instancją (typ „typ”)
  • (typ „typ”) jest podklasą (typu „obiektu”)

Co bleep się tutaj dzieje? To, co chcę usłyszeć, to bardzo głęboki powód tego, co się tutaj dzieje i dlaczego rzeczy są takie, jakimi są. Nie ma żadnych płytkich powodów ani analogii.

Odpowiedz

4

Mówi konkretnie o obiekcie type. W przypadku type wszystkie typy dziedziczą po <type 'type'>.

Uważam, że inne oświadczenie wskazuje tylko, że <type 'type'> to object; Przykładem myślałem patrząc dalej:

t = list.__class__ # <type 'type'> 
t.__bases__ # (<type 'object'>,) 
0

Ponieważ pojęcie typu jest taki sam jak klasy można podklasy rodzaju przy normalnych technik obiektowych i klasowych składni, aby go dostosować.

A ponieważ klasy są naprawdę instancjami klasy typów, tworzenie klas z niestandardowych podklas typu pozwala na zaimplementowanie niestandardowych rodzajów klas.

W klasach w nowym stylu:

  • typ jest klasa, która generuje klas zdefiniowanych przez użytkownika.
  • Metaclasses są podklasami klasy typu.
  • Obiekty klasy są instancjami klasy typów lub ich podklas.
  • Obiekty instancji są generowane z klasy.