W języku Python 2.x wszystkie nowe style dziedziczą od object
niejawnie lub jawnie. Następnie spójrz na to:Klasy w starym stylu, klasy nowego stylu i metaki
>>> class M(type):
... pass
...
>>> class A:
... __metaclass__ = M
...
>>> class B:
... pass
...
>>> a = A()
>>> b = B()
>>> type(A)
<class '__main__.M'>
>>> type(a)
<class '__main__.A'>
Czy to znaczy A
jest klasą nowy styl? Ale tak czy inaczej A
nie dziedziczy po object
, prawda?
>>> type(B)
<class 'classobj'>
>>> type(b)
<type 'instance'>
OK, B
to klasyczna klasa, czyż nie?
>>> isinstance(A, object)
True
>>> isinstance(B, object)
True
dlaczego są przypadki zarówno A
i B
przypadki object
?
Jeśli B
jest instancją , wówczas type(B)
nie byłby classobj
, prawda?
Wszystko jest przedmiotem! – orlp
Nie powinieneś wstawiać rzeczy '__slots__' w tym pytaniu. To zupełnie inne pytanie. –
@ChrisMorgan, tak, właśnie to sobie uświadomiłem. – Alcott