python属性如何以某种方式重载+;=二传手
我有一个关于使用装饰器的问题。 我正在编写一个驱动马达级的类函数。 这是一个骨架:python属性如何以某种方式重载+;=二传手,python,Python,我有一个关于使用装饰器的问题。 我正在编写一个驱动马达级的类函数。 这是一个骨架: class Stage(object): def get_position(self): print("Getting Position") return 0 def set_position_absolute(self, value): print("Setting Position Absolute %f"%value) de
class Stage(object):
def get_position(self):
print("Getting Position")
return 0
def set_position_absolute(self, value):
print("Setting Position Absolute %f"%value)
def set_position_relative(self, value):
print("Setting Position Relative %f"%value)
@property
def x(self):
return self.get_position()
@x.setter
def x(self,value):
self.set_position_absolute(value)
舞台位置(比如x)可以是:
- 以“绝对”方式设置一个值:新的x必须等于该值(x=值)
- 以“相对”方式设置一个值:新的x等于先前的_值+值(x+=值)
stage.x += 10
setter将只使用set_position_relative(10)方法,而不是同时调用get_position()和set_position_absolute(10)(现在就是这样)。这没有意义。如果
stage.x
当前是10
,该怎么办。不应该使用stage.x+=10
然后使用set\u position\u absolute(20)
?否则stage.x+=10
怎么知道现在值是20
?如果你可以在构造函数中使用一个简单的类变量,比如self.x=0
,然后按照你想要的方式修改它,为什么要使用属性呢?但是如果你真的有一个set\u position\u relative(10)
方法,然后您希望stage.x
支持\uuuuidd\uuuuu
方法。您应该让x
属性返回实现该方法的特殊对象。这不使用@property
。可以使用定义一个单独的位置
类,在本例中为\uuuIdd\uUuIdd(self,other)
@kamik423:确保可以使用属性
完成。只需返回该职位类别。