__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
グローバルまたはローカルの名前空間に存在する(上記のコードがやろうとしているものである)か、モジュール上のドットのアクセスを行う際には、名前の動的な検索をしたいですか?それは2つの異なるものです。
__getattr__
上のモジュールはPython 3.7からサポートされています