Trong Python 2.x, tất cả các lớp kiểu mới kế thừa từ object
ngầm hoặc rõ ràng. Sau đó, xem xét điều này:Lớp học kiểu cũ, lớp học kiểu mới và metaclasses
>>> 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'>
Điều này có nghĩa A
là một lớp học kiểu mới? Tuy nhiên, A
không kế thừa từ object
, đúng không?
>>> type(B)
<class 'classobj'>
>>> type(b)
<type 'instance'>
OK, B
là một lớp học cổ điển phải không?
>>> isinstance(A, object)
True
>>> isinstance(B, object)
True
tại sao trường hợp của cả hai A
và B
trường hợp của object
?
Nếu B
là phiên bản object
, thì type(B)
sẽ không là classobj
, phải không?
Mọi thứ đều là đối tượng! – orlp
Bạn không nên đặt điều '__slots__' trong câu hỏi này. Đó là một câu hỏi khác hoàn toàn. –
@ChrisMorgan, vâng, tôi mới nhận ra điều đó. – Alcott