Tôi muốn có thể lặp qua tất cả các lớp cơ sở, cả trực tiếp và gián tiếp, của một lớp nhất định, bao gồm cả chính lớp đó. Điều này rất hữu ích trong trường hợp bạn có một metaclass kiểm tra lớp Tùy chọn bên trong của tất cả các cơ sở của nó.Có chức năng tiêu chuẩn nào để lặp qua các lớp cơ sở không?
Để làm điều này, tôi đã viết như sau:
def bases(cls):
yield cls
for direct_base in cls.__bases__:
for base in bases(direct_base):
yield base
Có một chức năng tiêu chuẩn để làm việc này cho tôi?
Điều này có nhược điểm (có thể tranh cãi) khi không làm việc với các lớp kiểu cũ. 'inspect.getmro' trả về' cls .__ mro__' nếu nó hiện diện (nó nằm trong các lớp kiểu mới) và thực hiện tìm kiếm tùy chỉnh nếu không. (Thực tế thú vị: Bạn có thể tạo lỗi đệ quy bằng cách tạo phân cấp lớp kiểu cũ với nhiều lớp hơn độ sâu đệ quy tối đa và gọi 'getmro' trên đó) – aaronasterling