Классы в Python атрибуты и методы

Что такое классы в 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}

    Рейтинг
    ( Пока оценок нет )
    Понравилась статья? Поделиться с друзьями:
    Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: