目标
我尝试实现一个像类型检查功能一样的装饰器。我还没到那里,因为验证运行良好,但是当我尝试访问该属性时,我得到了错误:TypeError: __get__() takes 2 positional arguments but 3 were given。
我正在使用 Python 3.9.7。
描述
# Descriptor definition
class PositiveNumber:
def __get__(self, obj):
return self.value
def __set__(self, obj, value):
if not isinstance(value, (int, float)):
raise TypeError('value must be a number')
if value < 0:
raise ValueError('Value cannot be negative.')
self.value = value
# Decorator definition
def positive_number(attr):
def decorator(cls):
setattr(cls, attr, PositiveNumber())
return cls
return decorator
# class that actually check for the right type
@positive_number('number')
class MyClass(object):
def __init__(self, value):
self.number = value
def main():
a = MyClass(3)
print(a.number)
if __name__ == '__main__':
main()
你看到解决这个问题的方法了吗?