2014-03-06 1 views
1

파이썬에서 속성의 속성 값을 만들고 설정하고 싶습니다. 여기 파이썬에서 연결 가능한 동적 속성

은 예입니다

book = Dynamic() 
book.chapter1.section2 = 'abc' 

않은 setattr가 호출 될 때 작성해야하므로 내 책 객체가 장 속성이 없습니다. 나는 일이 왔 :

book = Dynamic() 
book.chapter1 = SubDynamic() 
book.chapter1.section2 = 'section 2' 

난 안하지만, 장이 존재하지 않는다고 말해 오류를받지 않고 하나 개의 라인으로 가입하는 방법을 알아낼 수 있습니다.

다음은 내가 가지고있는 것입니다.

class Dynamic(object): 
     def __setattr__(self, name, value): 
       sn = SubDynamic(value) 
       self.__dict__[name] = v 

class SubDynamic(object): 
     def __init__(self, attr): 
       value = "" 
       self.attr = value 

     def __setattr__(self, name, value): 
       self.__dict__[name] = value 

if __name__ == '__main__': 
     book = Dynamic() 
     book.chapter1.section2 = 'abc' 

답변

5

내가 방금 __getattr__을 구현하여이 조금 단순화 할 수 있다고 생각 :

class Dynamic(object): 
    def __getattr__(self, name): 
     sub = Dynamic() 
     setattr(self, name, sub) 
     return sub 


>>> book = Dynamic() 
>>> book.chapter1.section2 = 'abc' 
>>> book.chapter1 
<test.Dynamic object at 0x7feb0f697910> 
>>> book.chapter1.section2 
'abc' 
+0

내가 생각을 할 수있는 것보다 간단한 - 난 그냥 더 설명 할 것입니다 (다른 reders/영업에 대한) 그 __getattrr__은 그냥 인스턴스에 속성이 없을 때 호출됩니다. 따라서 동적으로 작성된 속성 또는 다른 속성을 더 읽음으로써이 메소드에 의해 속성이 파기되지는 않습니다. (모든 속성 액세스를 대신 제어하려면'__getattribute__'에 대한 python 문서를 확인하십시오) – jsbueno