__getattr__
모듈에서 클래스 와 동등한 것을 어떻게 구현할 수 있습니까?
예
모듈의 정적으로 정의 된 속성에 존재하지 않는 함수를 호출 할 때 해당 모듈에 클래스의 인스턴스를 생성하고 모듈의 속성 조회에서 실패한 것과 동일한 이름으로 메서드를 호출하고 싶습니다.
class A(object):
def salutation(self, accusative):
print "hello", accusative
# note this function is intentionally on the module, and not the class above
def __getattr__(mod, name):
return getattr(A(), name)
if __name__ == "__main__":
# i hope here to have my __getattr__ function above invoked, since
# salutation does not exist in the current namespace
salutation("world")
다음을 제공합니다.
matt@stanley:~/Desktop$ python getattrmod.py
Traceback (most recent call last):
File "getattrmod.py", line 9, in <module>
salutation("world")
NameError: name 'salutation' is not defined
salutation
글로벌 또는 로컬 네임 스페이스에 존재하거나 모듈에 도트 액세스 할 때 이름의 동적 조회를 원하는가 (위의 코드를 수행하려고하는 것입니다)? 그것은 두 가지 다른 것입니다.
__getattr__
on 모듈은 Python 3.7에서 지원됩니다