Tại sao phương pháp __get__
trong một số python descriptor chấp nhận lớp chủ sở hữu làm đối số thứ ba? Bạn có thể đưa ra một ví dụ về việc sử dụng nó không?Tại sao một phương thức mô tả python __get__ chấp nhận lớp chủ sở hữu là một arg?
Đối số đầu tiên (self
) là tự hiển nhiên, thứ hai (instances
) có ý nghĩa trong bối cảnh mô hình mô tả thường thấy (ví dụ để làm theo), nhưng tôi đã không bao giờ thực sự nhìn thấy thứ ba (owner
) được sử dụng. Ai đó có thể giải thích trường hợp sử dụng là gì?
Chỉ cần bằng cách tham khảo và câu trả lời điều kiện này là việc sử dụng điển hình của mô tả tôi đã nhìn thấy:
class Container(object):
class ExampleDescriptor(object):
def __get__(self, instance, owner):
return instance._name
def __set__(self, instance, value):
instance._name = value
managed_attr = ExampleDescriptor()
Cho rằng instance.__class__
có sẵn tất cả tôi có thể nghĩ đến là đi qua một cách rõ ràng lớp có cái gì đó để làm với việc truy cập trực tiếp bộ mô tả từ lớp thay vì một cá thể (ví dụ: Container.managed_attr
). Mặc dù vậy tôi không rõ ràng về những gì người ta sẽ làm trong __get__
trong tình huống này.
"ghi nhật ký hoặc tăng ngoại lệ hữu ích hơn" Cảm ơn. – Finn
Tại sao cũng không triển khai thuộc tính cấp lớp được quản lý? Ví dụ, khi một thuộc tính dữ liệu lớp hiện có sẽ được hưởng lợi từ việc được nhìn thấy trong các đơn vị khác nhau. Nói, Room.default_temperature_C, Room.default_temperature_F? Nó không phải là trường hợp sử dụng rõ ràng hơn, hay tôi đang thiếu một cái gì đó? – max
@max: bạn đang thiếu một cái gì đó;) - hỏi nó như là một câu hỏi thường xuyên nếu bạn muốn có một câu trả lời chi tiết. –