如何将setter属性作为参数传递给函数?

问题描述:

我想将一个setter属性作为参数传递给一个函数。 我有我的课程的以下属性。如何将setter属性作为参数传递给函数?

@property 
def drawMode(self): 
    return self._drawMode 

@drawMode.setter 
def drawMode(self, value): 
    self._drawMode = value 

我可以通过吸气剂作为参数成函数如下:

rectItem = CustGraphicsRectItem(rect, self.drawMode) 

什么是合格的setter语法?

+2

你打算传递给函数什么样的对象?你想通过setter的代码如何与它进行交互?你用来“传递getter”的'self.drawMode'实际上传递了属性存储的当前值。它没有传递函数或属性对象。设置一个值没有明显的相同之处(也许你应该调用一些返回一个你自己分配给'self.drawMode'的值)。 – Blckknght

如果您将该属性的名称传递给函数(以及对象本身),则可以执行类似操作。这允许从对象的类中检索属性对象。一旦获得,它的__set__()可以直接调用。

class Test: 
    def __init__(self): 
     self._drawMode = None 

    def foobar(self): 
     pass 

    @property 
    def drawMode(self): 
     return self._drawMode 

    @drawMode.setter 
    def drawMode(self, value): 
     self._drawMode = value 


def CustGraphicsRectItem(rect, obj, prop_name): 
    obj_type = type(obj) 
    if prop_name not in obj_type.__dict__: 
     raise TypeError('{!r} is not an attribute of class {}'.format(
          prop_name, obj_type.__name__)) 
    else: 
     prop = obj_type.__dict__[prop_name] 
     if not isinstance(prop, property): 
      raise TypeError('{!r} is not an property of class {}'.format(
           prop_name, obj_type.__name__)) 

    prop.__set__(obj, 42) # Set property's value via direct call to setter. 
    return rect 

test = Test() 
rect = [0, 0, 10, 20] 
print(test.drawMode) # -> None 
rectItem = CustGraphicsRectItem(rect, test, 'drawMode') 
print(test.drawMode) # -< 42