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()
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