2017-10-20 7 views
-3

함수에 인수로 setter 속성을 전달하려고합니다. 클래스에 대해 다음과 같은 속성이 있습니다.함수에 인자로 setter 속성을 전달하는 방법은 무엇입니까?

rectItem = CustGraphicsRectItem(rect, self.drawMode) 

세터를 통과 구문이란 다음과 같이

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

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

는 I 함수로 인수로 게터를 전달할 수 있는가?

+2

어떤 종류의 개체를 함수에 전달하려고합니까? setter에게 전달하고자하는 코드는 어떻게 상호 작용할 것으로 예상합니까? 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