我在这里参考了 python 文档来了解如何在 python 中创建一个具有受控 getter 和 setter 方法的类属性。 https://docs.python.org/3/howto/descriptor.html#id6
我用这段代码创建了一个描述符属性类:
class PropNumberString(object):
def __init__(self, initval=None, name='var_int'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print("in getter")
return self.val
def __set__(self, obj, val):
print("in setter")
self.val = int(val)
def __add__(self, val):
print("adding")
print("val to add: ", val)
self.val = int(self.val) + int(val)
return self
def __radd__(self, val):
return self.__add__(val)
class ConnectionTemplate(object):
tid = PropNumberString(0, "ID")
我也尝试定义一个 add 方法,即使提供了一个字符串,它也总是添加一个整数。这不起作用,似乎调用了“__get__”,然后调用了返回整数的add方法而不是我的add方法。
这是一个测试来证明:
my_template = ConnectionTemplate()
print("Getting value")
print(my_template.tid)
print("Updating value")
my_template.tid = 100
print("Doing add")
my_template.tid = my_template.tid + "1"
print(my_template.tid)
print("type: ", type(my_template.tid))
输出:
Getting value
in getter
0
Updating value
in setter
Doing add
in getter
Traceback (most recent call last):
File "connection_template.py", line 53, in <module>
my_template.tid = my_template.tid + "1"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
有没有好的解决方案?
函数式编程
相关分类