2017-10-20 14 views
-3

私は関数に引数としてセッタープロパティを渡そうとしています。 私のクラスには以下のプロパティがあります。setterプロパティを関数の引数として渡すにはどうすればよいですか?

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

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

次のように私は関数に引数としてゲッターを渡すことができます。

rectItem = CustGraphicsRectItem(rect, self.drawMode) 

セッターを渡すための構文は何ですか?

+2

どのような種類のオブジェクトを関数に渡そうとしていますか?どのようにコードは、セッターとのやりとりを期待して渡したいのですか? getterを渡すために使用している 'self.drawMode'は、実際にはプロパティによって格納されている現在の値を渡しています。関数またはプロパティオブジェクトを渡すことはありません。値を設定するための明白な同等のものはありません(あなた自身が 'self.drawMode'に割り当てた値を返すものを呼び出すだけかもしれません)。 – Blckknght

答えて

0

プロパティの名前を(オブジェクト自体と一緒に)関数に渡すと、そのようなことができます。これにより、オブジェクトのクラスからプロパティオブジェクトを取り出すことができます。それが得られると、その__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 
関連する問題