【发布时间】:2018-02-28 09:12:52
【问题描述】:
我正在尝试使用属性装饰器并执行基本操作,同时这样做会出错,并且面临删除器问题并且无法从代码中获得预期的输出。
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)
【问题讨论】:
-
问题出在 setter 上,确定吗?它应该接受一个参数,即 x 和 y 值的二元组。例如。你可以将 setter 设为
def values(self, (value1, value2)):,尽管这与 Python 3.x 不兼容。但请注意,您应该提供minimal reproducible example,而不仅仅是“遇到错误并面临问题”。 -
感谢您的建议。编辑过的代码,仍然有错误“AttributeError: 'Numbers' object has no attribute '_x'” @jonrsharpe
-
这就是应该发生的事情,当您在显式删除该属性后再次访问该属性时,您期望什么?
标签: python python-2.7 python-decorators