27

これは面倒です:

class MyClass:
    @staticmethod
    def foo():
        print "hi"

    @staticmethod
    def bar():
        MyClass.foo()

呼び出しで MyClass に名前を付けずにこれを機能させる方法はありますか? foo()つまり、最後の行で言うことができますか?

4

4 に答える 4

18

foo欲しいものを使って手に入れる方法はありません。暗黙的なクラス スコープは存在しないためfoo、ローカルまたはグローバルのいずれかになりますが、どちらも必要ありません。

クラスメソッドの方が便利だと思うかもしれません:

class MyClass:
    @classmethod
    def foo(cls):
        print "hi"

    @classmethod
    def bar(cls):
        cls.foo()

この方法では、少なくともクラスの名前を繰り返す必要はありません。

于 2013-01-15T15:12:33.973 に答える
1

ありえない。言語設計の問題です。それを C++ と比較すると、this(Python と同じです。Python ではselfと書くself.var必要があり、C++ では ではvarなくと書く必要がありますthis->var) と独自のクラスの両方がメンバー関数でデフォルトで使用されます。時々それは迷惑です。可能な唯一のことは、その機能に慣れることです。

于 2013-01-15T15:18:35.700 に答える
0

クラス名を「変数化」します。これは削除されませんが、名前が短くなります。

class MyClass:
    @staticmethod
    def foo():
        print "hi"

    @staticmethod
    def bar():
        c.foo()

c = MyClass
于 2020-09-29T10:23:24.657 に答える
-1

fooモジュール レベルの関数を作成し、それを次のようにクラスの名前空間に追加することで、ハッキングを行うことができますstaticmethod

def foo():
    print "hi"

class MyClass(object):
    foo = staticmethod(foo)

    @classmethod
    def bar(cls):
        return cls.foo()

    def baz(self):
        return foo()


c = MyClass()
c.bar()
c.baz()

MyClass.bar()
MyClass.foo()
于 2013-01-15T15:24:45.043 に答える