На этом этапе вы узнаете о атрибутах класса в Python. Атрибуты класса - это переменные, определенные внутри класса и общие для всех экземпляров (объектов) этого класса. Они отличаются от атрибутов экземпляра, которые специфичны для каждого отдельного экземпляра. Понимание атрибутов класса является важным аспектом при проектировании эффективных и организованных классов.
-
Откройте редактор VS Code.
-
Создайте новый файл с именем class_attributes.py в директории ~/project.
~/project/class_attributes.py
-
Добавьте следующий код в файл class_attributes.py:
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
## Creating instances of the Dog class
dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)
## Accessing the class attribute
print(dog1.species)
print(dog2.species)
## Accessing instance attributes
print(dog1.name)
print(dog2.name)
В этом примере species является атрибутом класса, так как он определен внутри класса Dog, но вне любого метода. name и age - это атрибуты экземпляра, так как они определены внутри метода __init__ и специфичны для каждого экземпляра Dog.
-
Запустите скрипт class_attributes.py с помощью следующей команды в терминале:
python class_attributes.py
Вы должны увидеть следующий вывод:
Canis familiaris
Canis familiaris
Buddy
Lucy
Как вы можете видеть, и dog1, и dog2 имеют одинаковое значение species, которое равно "Canis familiaris". Однако они имеют разные значения name, так как name - это атрибут экземпляра.
-
Теперь изменим атрибут класса и посмотрим, как это повлияет на экземпляры:
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
## Creating instances of the Dog class
dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)
## Accessing the class attribute
print(dog1.species)
print(dog2.species)
## Modifying the class attribute
Dog.species = "New Species"
## Accessing the class attribute again
print(dog1.species)
print(dog2.species)
-
Запустите скрипт class_attributes.py еще раз:
python class_attributes.py
Вы должны увидеть следующий вывод:
Canis familiaris
Canis familiaris
New Species
New Species
Обратите внимание, что когда мы изменяем Dog.species, изменения отражаются и в dog1, и в dog2, так как они используют общий атрибут класса.
Этот пример демонстрирует базовую концепцию атрибутов класса. Они общие для всех экземпляров класса и могут быть изменены путем прямого доступа к классу.