đoạn Đó không phải là quá nhiều sai như nhầm lẫn, do nơi nó xuất hiện: "lớp Custom" là nơi duy nhất trong các tài liệu Data Model nơi __bases__
được đề cập ở tất cả. Kể từ khi làm việc với các lớp tùy chỉnh là thời gian duy nhất bạn có thể quan tâm đến nội dung của __bases__
, tôi đoán rằng làm cho một số ý nghĩa.
Điều ngạc nhiên là nó đưa ra mô tả đầy đủ về __bases__
, bao gồm các chi tiết chỉ áp dụng cho non-các lớp tùy chỉnh như nội trang dựng sẵn, object
. Như bạn chỉ ra, object.__bases__
là trống:
>>> object.__bases__
()
Tôi nghĩ cụm từ đó được coi là một heads-up mà unknown_class.__bases__[0]
có thể nâng cao một IndexError
, bởi vì ngay cả trong Python 3, __bases__
thể được sản phẩm nào.
__bases__
cũng có thể là một đơn lẻ. Tại sao mọi người lại quan tâm đến số tiền mà, tôi không thể tưởng tượng được. Có lẽ bởi "singleton", họ có nghĩa là "1-tuple"? Er, OK ... Tôi vẫn không quan tâm.
Cập nhật: Như wim has pointed out, đoạn trong câu hỏi được nhập khẩu cùng với all of Python 2's Docs/reference/datamodel.rst
on Wed 15 tháng 8 năm 2007, và vẫn về cơ bản không thay đổi kể từ đó. Tuy nhiên, phần trong đó chỉ là "Lớp". Phần đó là renamed to "Custom classes" vào ngày 31 tháng 8 năm 2007, là một phần của nỗ lực xóa bỏ sự khác biệt "kiểu cũ" /"kiểu mới".
Việc thêm từ "Tùy chỉnh" dường như không cải thiện, vì phần lớn phần đó áp dụng cho hầu hết hoặc có thể tất cả các lớp (tôi không biết mức độ áp dụng cho các lớp được biên dịch từ ngôn ngữ khác) .
PS: Trong bất cứ trường hợp của cám dỗ để lén lút thay thế __bases__
thuộc tính sau khi tạo lớp, Python 3 đã bị một thông báo lỗi đặc biệt chỉ dành riêng cho bạn ...
>>> class A: pass
...
>>> A.__bases__
(<class 'object'>,)
>>> A.__bases__ =()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign non-empty tuple to A.__bases__, not()
này trông giống như một thiếu sót trong các tài liệu mà đã không bị xóa khi Python '3' được khởi chạy. 'class Foo: pass' trong Python' 2.x' mang lại '()' cho 'Foo .__ bases__'. –
Tất nhiên, tôi chỉ đoán; Tôi không biết nếu có bất kỳ ma thuật đen nào có thể cho phép bạn định nghĩa một lớp với một '__bases__' trống trong' Py3'. –