2014-09-01 3 views
1

동적으로 속성 메서드를 만들고 싶습니다.동적으로 파이썬 속성 함수를 만듭니다.

예를 들어, 첫 번째 클래스 A가 두 번째 클래스와 동등하기를 원합니다.

어떨까요?

class A(object): 
    def __init__(self): 
    self._a = 10 
    self.createPropertyMethod(a, self._a, getFunc, setFunc, delFunc) 

    def createPropertyMethod(self, name, value, getFunc, setFunc, delFunc) 
    #TODO 

.

class A(object): 
    def __init__(self): 
    self._a = 10 

    @property 
    def a(self): 
    return getFunc(self._a) 
    @a.setter 
    def a(self, value): 
    setFunc(self._a, value) 
    @a.deleter 
    def a(self): 
    delFunc(self._a) 

답변

3

당신은하지 경우에서 할 수 없습니다. property 개체는 작업에 의존하는 descriptor protocol 클래스의 일부 여야합니다.

속성 액세스를 동적으로 프록시하는 대신 __getattr__, __setattr____delattr__ 후크를 사용할 수 있습니다.

+0

클래스에 데코레이터를 만드는 것이 @asleea가 달성하고자하는 것을 작동 시키는가? 새 스타일 수업에 익숙하지 않습니다. – bluefoggy

+0

@kingsdeb : 클래스 데코레이터는 인스턴스가 아닌 클래스를 변경합니다. 예, 데코레이터에서'property' 오브젝트를 생성하고, 클래스에 추가하고 작동하게 할 수 있습니다. –

+0

@ Martin Pieters - 제게 이런 코드를 좀 더 자세히 설명해 주시겠습니까? – bluefoggy

관련 문제