Sobes.tech
Junior — Middle

Каква е разликата между променливите на ниво клас и променливите на екземпляр в Python?

sobes.tech AI

Отговор от AI

Променливите на ниво клас (class variables) се обявяват вътре в класа, но извън методите, и са общи за всички екземпляри на този клас. Те се съхраняват в пространството за имена на класа и са достъпни чрез класа и неговите екземпляри.

Променливите на екземпляра (instance variables) се създават вътре в методите (обикновено в __init__) и принадлежат на конкретен обект. Всеки екземпляр има свои собствени стойности за тези променливи.

Пример:

class MyClass:
    class_var = 0  # променлива на класа

    def __init__(self, value):
        self.instance_var = value  # променлива на екземпляра

obj1 = MyClass(10)
obj2 = MyClass(20)

print(obj1.class_var)      # 0
print(obj2.class_var)      # 0
print(obj1.instance_var)   # 10
print(obj2.instance_var)   # 20

MyClass.class_var = 5
print(obj1.class_var)      # 5
print(obj2.class_var)      # 5

obj1.instance_var = 15
print(obj1.instance_var)   # 15
print(obj2.instance_var)   # 20

По този начин, промяната на променливата на класа се отразява на всички екземпляри, ако те не я пренапишат локално, а променливите на екземпляра са уникални за всеки обект.