我尝试使用属性修饰器并执行基本操作,同时执行此错误以及遇到删除器问题而未获得代码的预期输出。
class Numbers(object):
Multiplier = 4
def __init__(self, x, y):
self._x = x
self._y = y
def add(self):
return self._x + self._y
@classmethod
def multiply(cls, a):
return a*cls.Multiplier
@staticmethod
def subtract(b,c):
return b-c
@property
def values(self):
return "(%d,%d)" % (self._x, self._y)
@values.setter
def values(self, value1, value2):
self._x = value1
self._y = value2
@values.deleter
def values(self):
print('deleting')
del self._x
del self._y
val = Numbers(2,4)
print(val.values)
print(val._x)
print(val._y)
print(val.multiply(5))
print(val.subtract(8,2))
print(val.add())
val.values = (34,45)
print(val.values)
del (val.values)
print(val.values)
答案 0 :(得分:1)
您的代码有2个问题。删除器实际上正如人们所期望的那样从属性中删除变量,但这不是您可能想要的,因为您尝试在删除后显示它们。
因此,您可能希望将其替换为0
或None
,而不是实际删除变量。
@values.deleter
def values(self):
print('deleting')
self._x = None
self._y = None
另一个可以让您的代码更直接的选项是不使用del
关键字,而是制作一个" clear"功能和用法如val.clear()
第二个问题是使用setter函数,因为它期望有2个变量,但这不能用val.values = something
表达式完成。所以我建议你使用以下格式:
@values.setter
def values(self, values):
value1, value2 = values
self._x = value1
self._y = value2
你会存储这样的值:
val.values = (3, 5)