web-dev-qa-db-fra.com

Variable globale Python

Quelle est la bonne façon de définir une variable globale qui a une portée de classe en python?

Venant d'un arrière-plan C/C++/Java, je suppose que c'est correct:

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

Ce que vous avez est correct, bien que vous ne l'appeliez pas global, c'est un attribut de classe et est accessible via la classe par exemple Shape.lolwut ou via une instance, par exemple shape.lolwut mais soyez prudent lorsque vous le définissez car cela définira un attribut de niveau instance et non un attribut de classe

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 

sortie:

1 1 1 2 3 2

Quelqu'un peut s'attendre à ce que la sortie soit 1 1 2 2 3 3 mais ce serait incorrect

71
Anurag Uniyal