Menu
Coddy logo textTech

Переменные экземпляра и класса

Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 13 из 64.

Переменные экземпляра уникальны для каждого объекта, в то время как переменные класса являются общими для всех объектов одного и того же класса.

Вот пример класса с обоими типами переменных

class Student:
    # Переменная класса — общая для всех экземпляров
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Переменные экземпляра — уникальные для каждого студента
        self.name = name
        self.grade = grade

Создайте объекты студентов:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

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

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

Доступ к переменным класса (общим для всех объектов):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Теперь измените переменную класса:

Student.school = "Python Academy"

Посмотрите, как изменение влияет на все экземпляры:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Вывод:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

Вы также можете создавать переменные экземпляра после создания объекта:

alice.age = 16  # Это создает переменную экземпляра
print(alice.age)  # 16
# print(bob.age)  # Это вызовет ошибку — у bob нет age

Ключевое отличие: Переменные экземпляра (созданные с помощью self.variable_name) уникальны для каждого объекта, в то время как переменные класса (определенные непосредственно в классе) являются общими для всех объектов. Изменение переменной класса влияет на все экземпляры.

challenge icon

Задание

Легко

Завершите банковскую систему. Вы определите класс BankAccount в одном файле и будете использовать его в другом.

Вы будете работать с:

  • bank_account.py: Определите класс BankAccount с атрибутами и методами
  • driver.py: Импортируйте класс, создайте аккаунты и продемонстрируйте переменные класса

Следуйте комментариям TODO в обоих файлах для получения пошаговых инструкций. Комментарии помогут вам создать класс с соответствующими переменными, методами и покажут, как переменные класса влияют на все экземпляры.

Шпаргалка

Переменные экземпляра уникальны для каждого объекта, в то время как переменные класса являются общими для всех объектов одного и того же класса.

Класс с обоими типами переменных:

class Student:
    # Class variable - shared by all instances
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Instance variables - unique to each student
        self.name = name
        self.grade = grade

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

alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name)  # Alice
print(bob.name)    # Bob

Доступ к переменным класса (общим для всех объектов):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Изменение переменных класса влияет на все экземпляры:

Student.school = "Python Academy"
print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Создание переменных экземпляра после создания объекта:

alice.age = 16  # This creates an instance variable
print(alice.age)  # 16

Попробуйте сами

# TODO: Импортируйте класс BankAccount из bank_account.py
from bank_account import BankAccount

# TODO: Создайте два аккаунта со следующими данными:
# - account1: владелец "Alice Smith" с балансом $1000
# - account2: владелец "Bob Jones" с балансом $2000

# TODO: Вызовите display_info() для обоих аккаунтов

# TODO: Измените переменную класса interest_rate на 0.03 (3%)
# Используйте этот формат: BankAccount.interest_rate = 0.03

# TODO: Выведите текст "After interest rate change:"

# TODO: Снова вызовите display_info() для обоих аккаунтов, чтобы показать, что у них обоих новая процентная ставка
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Object Oriented Programming