__getattr__() 의미

게으른 개미개발자·2022년 10월 27일

python

목록 보기
1/1

모듈 레벨의 getattrdir() 의미

모든 파이썬 클래스는 커스텀 getattr() 및 dir() 메서드를 정의해 객체의 동적 속성 접근을 커스터마이징할 수 있습니다. getattr() 함수는 주어진 속성 이름이 존재하지 않을 때 호출되고 누락된 속성 룩업을 찾아 즉시 값은 만듭니다. dir() 메서드는 객체가 dir() 함수에 전달될 때 호출되며 객체 속성 이름의 목록을 반환합니다.

파이썬 3.7부터 getattr() 및 dir() 함수는 모듈 레벨에서 정의할 수 있습니다. 즉, torch.nn 모듈을 상속받아 만든, pyTorch 모델들은 torch.nn 모듈 안의 _ getattr__() 함수를 호출하게 됩니다.

def __getattr__(self, name: str) -> Union[Tensor, 'Module']:
        if '_parameters' in self.__dict__:
            _parameters = self.__dict__['_parameters']
            if name in _parameters:
                return _parameters[name]
        if '_buffers' in self.__dict__:
            _buffers = self.__dict__['_buffers']
            if name in _buffers:
                return _buffers[name]
        if '_modules' in self.__dict__:
            modules = self.__dict__['_modules']
            if name in modules:
                return modules[name]
        raise AttributeError("'{}' object has no attribute '{}'".format(
            type(self).__name__, name))

실제 python 3.8 버전의 pyTorch 모듈 패키지를 확인해보니, 다음과 같이 정의되어, 인스턴스에 존재하지 않는 속성의 경우 다음과 같이 찾아서 반환하게 됩니다.

profile
특 : 미친듯한 게으름과 부지런한 생각이 공존하는 사람

0개의 댓글