Các tài liệu cho Python 2 is not very helpful trong việc đưa ra một lời giải thích là tại sao bạn không thể gán thuộc tính cho một object()
, nhưng tài liệu cho Python 3 provides a bit more information:
Return một đối tượng gì đặc biệt mới . đối tượng là cơ sở cho tất cả các lớp. Nó có các phương thức chung cho tất cả các cá thể của các lớp Python. Hàm này không chấp nhận bất kỳ đối số nào.
Lưu ý: đối tượng không có một__dict__
, vì vậy bạn không thể gán thuộc tính tùy ý để một thể hiện của lớp đối tượng.
Vì vậy, lý do bạn không thể thêm các thuộc tính tùy ý để object()
của bạn dường như là vì thực tế rằng object()
trường hợp không có một thực hiện các thuộc tính __dict__
, không phải vì object()
trường hợp là không thay đổi:
>>> hasattr(object(), '__dict__')
False
>>>
Một điều thú vị khác, nhưng có lẽ không liên quan đến cuộc thảo luận trong tay, là trong khi một cá thể của đối tượng có thể không có thực hiện __dict__
, chính lớp object
sẽ thực hiện:
>>> hasattr(object, '__dict__')
True
Đối với tại sao phần của câu hỏi, tôi không thể tìm thấy bất kỳ lý do chính xác tại sao object()
không có __dict__
. Có lẽ là vì - như @tdelany đã đề cập đến trong các nhận xét - một chi tiết triển khai. Nếu bạn thực sự muốn có câu trả lời dứt khoát, bạn nên ask Guido himself.
Nguồn
2016-11-28 21:17:01
Bản sao có thể có của [Python: lý do tại sao \ _ \ _ dict \ _ \ _ thuộc tính không có trong các phiên bản lớp được tạo sẵn] (http://stackoverflow.com/questions/9502183/python-why-is-dict-attribute -nội dung không có trong lớp) –