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+=值)
我想做的是以这样的方式使用decorator,如果我使用如下内容:

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:确保可以使用
属性
完成。只需返回该职位类别。