Назад к вопросам
Junior
131
questionbank

В чем отличие атрибута класса от атрибута объекта?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Атрибуты класса принадлежат самому классу и разделяются всеми его экземплярами. Атрибуты объекта (экземпляра) принадлежат конкретному экземпляру класса и уникальны для этого экземпляра.

Атрибут Описание Доступ Изменение
Атрибут класса Принадлежит классу, общий для всех экземпляров ClassName.attribute или object.attribute Меняется для всех экземпляров при изменении через класс
Атрибут объекта Принадлежит конкретному экземпляру, уникален object.attribute Изменяется только для данного экземпляра

Пример:

class Dog:
    species = "Canis familiaris"  # Атрибут класса

    def __init__(self, name, age):
        self.name = name  # Атрибут объекта
        self.age = age    # Атрибут объекта

# Создаем два экземпляра
dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)

# Доступ к атрибутам класса и объекта
print(dog1.species)  # Canis familiaris
print(dog2.species)  # Canis familiaris
print(dog1.name)     # Buddy
print(dog2.name)     # Lucy

# Изменение атрибута класса через класс
Dog.species = "Domestic dog"
print(dog1.species) # Domestic dog
print(dog2.species) # Domestic dog

# Изменение атрибута объекта
dog1.age = 4
print(dog1.age) # 4
print(dog2.age) # 5 (не изменился)

# Присвоение атрибута с тем же именем, что и атрибут класса, экземпляру
# Создает атрибут объекта, который "скрывает" атрибут класса для этого экземпляра
dog1.species = "Wild dog"
print(dog1.species) # Wild dog (атрибут объекта)
print(dog2.species) # Domestic dog (атрибут класса)
print(Dog.species)  # Domestic dog (атрибут класса)