从文档:
以下方法仅在包含该方法的类的实例(所谓的描述符类)出现在所有者类中( )时适用。
为了使描述符也能与实例属性一起使用,您需要重写。__getattribute__
方法BusinessLogic
(尚未进行全面测试,但可以根据情况工作):
def __getattribute__(self, attr):
obj = object.__getattribute__(self, attr)
if hasattr(obj, '__get__'):
return obj.__get__(self, type(self))
return obj
如果您有数据描述符,则还需要处理该__setattr__
零件。
def __setattr__(self, attr, val):
try:
obj = object.__getattribute__(self, attr)
except AttributeError:
# This will be raised if we are setting the attribute for the first time
# i.e inside `__init__` in your case.
object.__setattr__(self, attr, val)
else:
if hasattr(obj, '__set__'):
obj.__set__(self, val)
else:
object.__setattr__(self, attr, val)