38

私が定義した場合:

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass

関数呼び出し Foo.bar() がクラス名 Foo を決定することは可能ですか?

4

3 に答える 3

49

staticmethod を classmethod に置き換えます。これは、呼び出されたときにクラスに渡されるため、そこからクラス名を取得できます。

class Bar(object):

    @classmethod
    def bar(cls):
        # code
        print cls.__name__

class Foo(Bar):
    # code
    pass

>>> Bar.bar()
Bar

>>> Foo.bar()
Foo
于 2010-08-29T21:25:43.113 に答える
3

クラス情報を見つける必要がある場合、適切な方法は を使用すること@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
于 2010-08-29T21:31:33.070 に答える