본문 바로가기
파이썬

파이썬 기본 동작을 중단하지 않고 Python에서 __getattr__을 어떻게 재정의합니까?

by º기록 2020. 12. 13.
반응형

클래스의 __ getattr __ 메서드를 재정 의하여 멋진 작업을 수행하고 싶지만 기본 동작을 중단하고 싶지 않습니다.

이를 수행하는 올바른 방법은 무엇입니까?

 

해결 방법

 

__ getattr __ 재정의는 괜찮습니다. __ getattr __ 는 마지막 수단으로 만 호출됩니다. 인스턴스에 이름과 일치하는 속성이없는 경우에만 호출됩니다. 예를 들어 foo.bar 에 액세스하면 foo bar __ getattr __ 가 호출됩니다. >. 처리하고 싶지 않은 속성 인 경우 AttributeError 를 발생시킵니다.

class Foo(object):
    def __getattr__(self, name):
        if some_predicate(name):
            # ...
        else:
            # Default behaviour
            raise AttributeError

그러나 __ getattr __ 과 달리 __ getattribute __ 가 먼저 호출됩니다 (새 스타일 클래스, 즉 객체에서 상속 된 클래스에서만 작동 함). 이 경우 다음과 같이 기본 동작을 유지할 수 있습니다.

class Foo(object):
    def __getattribute__(self, name):
        if some_predicate(name):
            # ...
        else:
            # Default behaviour
            return object.__getattribute__(self, name)


 

참조 페이지 https://stackoverflow.com/questions/2405590

 

 

반응형

댓글