Câu hỏi của bạn có một chút không rõ ràng. Bạn muốn xác định "loại cá thể lớp". Điều này có thể có nghĩa là hai điều. Hoặc bạn muốn xác định là một cá thể là một cá thể của một lớp cụ thể. Bạn có thể làm điều đó như sau:
>>> isinstance(a, A)
True
Bạn cũng có thể nhận lớp với type()
cuộc gọi, nhưng mà nói chung là không phải là rất hữu ích:
>>> type(a)
<class '__main__.A'>
Nhưng các xét nghiệm bạn hiển thị không kiểm tra này . Thay vào đó, họ kiểm tra loại lớp là gì. Nhưng Python 3 chỉ có một loại lớp. Python 2 và cả hai lớp "kiểu cũ" và "kiểu mới", nhưng Python 3 chỉ có các lớp kiểu mới, do đó không cần phải thực hiện kiểu kiểm tra này bằng Python 3.
Bạn cũng có thể sử dụng metaclasses. Trong trường hợp đó, bạn có thể tìm thấy những metaclass bằng cách kiểm tra các lớp của __class__
:
>>> from abc import ABCMeta
>>> class B(metaclass=ABCMeta): pass
>>> type(B)
<class 'abc.ABCMeta'>
Từ ý kiến của bạn, tuy nhiên, có vẻ như bạn muốn để xác định xem một đối tượng là một thể hiện hay không. Bạn sẽ có được câu trả lời tốt hơn nếu bạn hỏi rằng thay vào đó ...
Dù sao, để làm điều đó bạn sử dụng inspect.isclass
:
>>> import inspect
>>> inspect.isclass(a)
False
>>> inspect.isclass(A)
True
Điều này là do tất cả mọi thứ là một ví dụ:
>>> isinstance(type, type)
True
Nhưng không phải tất cả mọi thứ là một lớp.
Nguồn
2012-03-04 18:22:14
Bạn có hỏi về cách xác định xem một đối tượng là một lớp hay một thể hiện của một lớp không? – grifaton
InstanceType là các lớp kiểu cũ, không tồn tại ở 3.x. –
@grifaton, tôi muốn phân biệt lớp với trường hợp – Opsa