2017-02-10 1 views
0

목표는 python3에서 객체가 속성 액세스와 관련하여 정상적으로 작동하는 것입니다. 단, 속성이 일반 조회를 통해 사용할 수없는 경우는 예외입니다. 다른 방법으로 값을 가져 오거나 계산해야합니다.객체에 기본값을 갖는 멋진 (r) 방법이 있습니까?

나는 하나 __getattr__ 방법을 정의하여 문제를 해결할 수 있다는 것을 알고

def __getattr__(self, key): 
    if key == 'foo': 
     return calculate_default_foo() 
    elif key == 'bar': 
     return getattr(dfltobj, 'bar') 
    elif key == 'frob': 
     return 42 
    raise AttributeError 

하지만 내가 python3에서이 작업을 수행 할 수있는 더 우아한 방법이 궁금 python2 그렇게 느낀다. property을 정의하는 것만으로는 그 속성에 대한 액세스를 완전히 오버라이드 (override) 할 수 없으므로 그다지 잘 작동하지 않습니다. 그렇지 않으면 좋은 접근 방식이 될 것입니다.

답변

0

내가 주위에 방법이 있다고 생각하지 않지만, __getattr__을 수정하는 좋은 (R) 방법이있다 :

def __getattr__(self, item): 
    if item == "foo" and not self.foo: 
     return calculate_default() 
    return self.__getattribute__(foo) 

그것을 :)

+0

도움을 희망 난 당신이 질문 a를 오해 생각이 비트. 의도는'foo.attr2'가 디폴트 값을 산출해야한다는 것입니다 (즉석에서 계산 될 필요가 있습니다). – skyking

+0

나쁘다! 나는 지금 그것을 얻었을거야 .-. – mikelsr

관련 문제