208

次のコードがある場合:

class Foo(object):
    bar = 1

    def bah(self):
        print(bar)
        
f = Foo()
f.bah()

文句を言う

NameError: グローバル名 'bar' が定義されていません

barメソッド内でクラス/静的変数にアクセスするにはどうすればよいbahですか?

4

5 に答える 5

216

またはをbar使用する代わりに。に割り当てると静的変数が作成され、に割り当てるとインスタンス変数が作成されます。self.barFoo.barFoo.barself.bar

于 2009-04-01T21:25:28.403 に答える
108

クラスメソッドを定義します。

class Foo(object):
    bar = 1
    @classmethod
    def bah(cls):    
        print cls.bar

これで、bah()インスタンスメソッドである必要がある場合(つまり、selfにアクセスできる場合)でも、クラス変数に直接アクセスできます。

class Foo(object):
    bar = 1
    def bah(self):    
        print self.bar
于 2009-04-02T09:42:57.227 に答える
13
class Foo(object):
     bar = 1
     def bah(self):
         print Foo.bar

f = Foo() 
f.bah()
于 2017-01-10T08:39:11.637 に答える