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