Python Language Classi e variabili di istanza


Esempio

Le variabili di istanza sono univoche per ogni istanza, mentre le variabili di classe sono condivise da tutte le istanze.

class C:
    x = 2  # class variable

    def __init__(self, y):
        self.y = y  # instance variable

C.x
# 2
C.y
# AttributeError: type object 'C' has no attribute 'y'

c1 = C(3)
c1.x
# 2
c1.y
# 3

c2 = C(4)
c2.x
# 2
c2.y
# 4

È possibile accedere alle variabili di classe sulle istanze di questa classe, ma assegnando all'attributo class verrà creata una variabile di istanza che ombreggia la variabile di classe

c2.x = 4
c2.x
# 4
C.x
# 2

Si noti che mutando variabili di classe dalle istanze può portare ad alcune conseguenze inaspettate.

class D:
    x = []
    def __init__(self, item):
        self.x.append(item)  # note that this is not an assigment!

d1 = D(1)
d2 = D(2)

d1.x
# [1, 2]
d2.x
# [1, 2]
D.x
# [1, 2]