На этом этапе вы узнаете о атрибутах класса в 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
, так как они используют общий атрибут класса.
Этот пример демонстрирует базовую концепцию атрибутов класса. Они общие для всех экземпляров класса и могут быть изменены путем прямого доступа к классу.