Phương thức ma thuật __getattr__
được gọi khi thuộc tính không tồn tại trên lớp cá thể/lớp/cha mẹ. Bạn muốn sử dụng nó để nâng cao một ngoại lệ đặc biệt cho một thuộc tính thiếu:
class Foo(object):
def __getattr__(self, attr):
#only called what self.attr doesn't exist
raise MyCustonException(attr)
Nếu bạn muốn tùy chỉnh quyền truy cập vào các thuộc tính lớp, bạn cần phải xác định __getattr__
trên metaclass/loại:
class BooType(type):
def __getattr__(self, attr):
print attr
return attr
class Boo(object):
__metaclass__ = BooType
boo = Boo()
Boo.asd # prints asd
boo.asd # raises an AttributeError like normal
Nếu bạn muốn tùy chỉnh tất cả truy cập thuộc tính thuộc tính, hãy sử dụng phương pháp ma thuật __getattribute__
.
Điều đó có thay đổi quyền truy cập thuộc tính không thuộc tính lớp không? –
@ RomanA.Taycher Tôi đã mở rộng câu trả lời của mình. – agf