web-dev-qa-db-ja.com

グローバル変数Pythonクラス

Pythonでクラススコープを持つグローバル変数を定義する適切な方法は何ですか?

C/C++/Javaのバックグラウンドから来た私はこれが正しいと思います:

class Shape:
    lolwut = None

    def __init__(self, default=0):
        self.lolwut = default;
    def a(self):
        print self.lolwut
    def b(self):
        self.a()
29
nobody

あなたが持っているものは正しいですが、あなたはそれをグローバルとは呼ばないでしょうが、それはクラス属性であり、クラスを介してアクセスできますShape.lolwutまたはインスタンスを介してshape.lolwutただし、クラス属性ではなくインスタンスレベルの属性を設定するため、設定中は注意してください

class Shape(object):
    lolwut = 1

shape = Shape()

print Shape.lolwut,  # 1
print shape.lolwut,  # 1

# setting shape.lolwut would not change class attribute lolwut 
# but will create it in the instance
shape.lolwut = 2

print Shape.lolwut,  # 1
print shape.lolwut,  # 2

# to change class attribute access it via class
Shape.lolwut = 3

print Shape.lolwut,  # 3
print shape.lolwut   # 2 

出力:

1 1 1 2 3 2

誰かが1 1 2 2 3 3であると期待するかもしれませんが、それは間違っているでしょう

71
Anurag Uniyal