- Что такое классы в Python?
- Что такое атрибуты классов?
- Что такое методы классов?
- Как работать с атрибутами и методами?
- Доступ к атрибутам класса
- Прямой доступ:
- Через getattr():
- Проверка наличия атрибута
- С использованием __dict__:
- С использованием hasattr():
- Изменение атрибута
- Прямое изменение:
- С использованием setattr():
- Создание нового атрибута
- Прямое создание:
- С использованием setattr():
- Удаление атрибута
- С использованием del:
- С использованием delattr():
Что такое классы в Python?
Классы в Python — это основа объектно-ориентированного программирования (ООП), позволяющая создавать пользовательские типы данных, объединяющие данные (атрибуты) и функции (методы). Классы дают возможность моделировать реальные объекты и их поведение, делая код более структурированным и удобным для работы.
Класс — это шаблон или «чертеж» для создания объектов. Он определяет свойства (атрибуты) и действия (методы), которые будут общими для всех объектов данного типа. Объект, созданный на основе класса, называется экземпляром класса.
class Person:
name = "Иван"
age = 30
# Создание экземпляра класса
person1 = Person()
print(person1.name) # Иван
print(person1.age) # 30
Здесь name и age — это атрибуты класса, а Person — имя самого класса.
Что такое атрибуты классов?
Атрибуты класса — это переменные, которые определяются внутри класса и используются для хранения данных. Они делятся на два типа:
- Атрибуты класса (общие): Они задаются внутри класса и одинаковы для всех его экземпляров. Изменение атрибута класса влияет на все экземпляры.
class Car:
wheels = 4 # Атрибут класса
print(Car.wheels) # 4
car1 = Car()
car2 = Car()
Car.wheels = 6 # Изменение атрибута класса
print(car1.wheels, car2.wheels) # 6 6
- Атрибуты экземпляра: Это данные, уникальные для каждого объекта. Они создаются в методе
__init__при создании экземпляра.
class Car:
def __init__(self, color):
self.color = color # Атрибут экземпляра
car1 = Car("красный")
car2 = Car("синий")
print(car1.color, car2.color) # красный синий
Что такое методы классов?
Методы класса — это функции, определённые внутри класса, которые работают с его атрибутами. Методы делятся на три типа:
- Обычные методы: Они принимают в качестве первого аргумента
self, который указывает на конкретный экземпляр. Используются для работы с атрибутами экземпляра.
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name} лает: Гав-гав!")
dog = Dog("Шарик")
dog.bark() # Шарик лает: Гав-гав!
- Методы класса: Они используют декоратор
@classmethodи работают с атрибутами класса. Первый параметр —cls, который указывает на сам класс.
class Cat:
species = "Млекопитающее" # Атрибут класса
@classmethod
def get_species(cls):
return cls.species
print(Cat.get_species()) # Млекопитающее
- Статические методы: Определяются с использованием декоратора
@staticmethod. Они не имеют доступа ни к атрибутам экземпляра, ни к атрибутам класса.
class Math:
@staticmethod
def add(a, b):
return a + b
print(Math.add(5, 3)) # 8
Как работать с атрибутами и методами?
Чтобы получить доступ к атрибутам или методам, используется нотация имя_объекта.имя_атрибута или имя_объекта.имя_метода().
Кроме того, можно динамически управлять атрибутами с помощью встроенных функций:
getattr()— для получения значения атрибута.setattr()— для установки значения.hasattr()— для проверки существования.delattr()— для удаления атрибута.
Доступ к атрибутам класса
Прямой доступ:
class Person:
name = 'Jared'
age = 30
print(Person.name) # Jared
print(Person.age) # 30
Через getattr():
class Person:
name = 'Jared'
age = 30
print(getattr(Person, 'name')) # Jared
print(getattr(Person, 'age')) # 30
print(getattr(Person, 'salary', 'Нет такого атрибута')) # Нет такого атрибута
Проверка наличия атрибута
С использованием __dict__:
class Person:
name = 'Jared'
age = 30
print('salary' in Person.__dict__) # False
print('name' in Person.__dict__) # True
С использованием hasattr():
class Person:
name = 'Jared'
age = 30
print(hasattr(Person, 'name')) # True
print(hasattr(Person, 'money')) # False
Изменение атрибута
Прямое изменение:
class Person:
name = 'Jared'
age = 30
Person.age = 35
print(Person.age) # 35
С использованием setattr():
class Person:
name = 'Jared'
age = 30
setattr(Person, 'age', 40)
print(Person.age) # 40
Создание нового атрибута
Прямое создание:
class Person:
name = 'Jared'
Person.salary = 5000
print(Person.salary) # 5000
С использованием setattr():
class Person:
name = 'Jared'
setattr(Person, 'bonus', 2000)
print(Person.bonus) # 2000
Удаление атрибута
С использованием del:
class Person:
name = 'Jared'
age = 30
del Person.age
print(Person.__dict__) # {'__module__': '__main__', 'name': 'Jared', '__doc__': None}
С использованием delattr():
class Person:
name = 'Jared'
age = 30
delattr(Person, 'name')
print(Person.__dict__) # {'__module__': '__main__', 'age': 30, '__doc__': None}