私が定義した場合:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
関数呼び出し Foo.bar() がクラス名 Foo を決定することは可能ですか?
私が定義した場合:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
関数呼び出し Foo.bar() がクラス名 Foo を決定することは可能ですか?
staticmethod を classmethod に置き換えます。これは、呼び出されたときにクラスに渡されるため、そこからクラス名を取得できます。
class Bar(object):
@classmethod
def bar(cls):
# code
print cls.__name__
class Foo(Bar):
# code
pass
>>> Bar.bar()
Bar
>>> Foo.bar()
Foo
クラス情報を見つける必要がある場合、適切な方法は を使用すること@classmethod
です。
class Bar(object):
@classmethod
def bar(cls):
# code
print(cls.__name__)
class Foo(Bar):
# code
pass
これで、メソッドは、呼び出し元の実際のクラスであるbar
クラスへの参照を持ちます。cls
コードに示されているように、は探しているクラスcls.__name__
の名前です。
>>> Foo.bar()
Foo
>>> Bar.bar()
Bar