ハードコードされた関数の名前を文字列に変換するコマンドが必要なときに、それを探して組み込みの__name__
関数を使い始めました。問題は、__name__
が希望の名前を取得する方法を理解しているとは思わないということです。私はそれがローカル()またはdir()で現在見えるものと関係があることを知っていますが、それはそれです...私は解決する方法がわからないという間違いの中で。ここでこの場合、__name__はなぜ機能しないのですか? AttributeErrorが発生しました
は私のエラーを再現するいくつかのコードです:私は、リストに私の静的メソッドを入れて、ときにしようとしていることであるだから、なぜ
AttributeError: 'staticmethod' object has no attribute '__name__'
:
class Abc:
@staticmethod
def my_static_func():
return
def my_method(self):
return
class_list = [my_static_func]
method_list = [my_method]
#These calls work
Abc.my_static_func.__name__
Abc.my_method.__name__
Abc.method_list[0].__name__
#But This call raises an AttributeError
Abc.class_list[0].__name__
は、私は、このエラーメッセージが表示されますそれが機能しないリストから関数の名前を取得しますか?この質問が愚かであれば私を許してください。あなたがはっきりとわかるように、私は__name__
がどのように働くのかという基本原則を理解していません(これらのトピック名を与えることさえ知りません!)。答えはいいですが、いくつかのドキュメントへの参照も歓迎されるでしょう。このコード
@staticmethod
def my_static_method(...):
....
my_static_method
がstaticmethod
に包まれている機能で
私はこれを見つけました:http://stackoverflow.com/questions/1987919/why-can-decorator-not-decorate-a-staticmethod-or-a-classmethod。明らかにstaticmethodは関数を返さない:classmethodとstaticmethodは関数ではなく記述子オブジェクトを返す。ほとんどのデコレータは記述子を受け入れるように設計されていません。 –