Атрибуты могут быть наглядно отнесены к двум типам:
- атрибуты класса
- атрибуты экземпляров
Атрибуты класса делятся среди всех объектов класса, в то время как атрибуты экземпляров являются собственностью экземпляра.
Помните, что экземпляр — это просто альтернативное название объекта.
Атрибуты экземпляра объявляются внутри любого метода, в то время как атрибуты класса объявляются вне любого метода.
Следующий пример прояснит эту разницу:
class Car:
# создаем атрибуты класса
car_count = 0
# создаем методы класса
def start(self, name, make, model):
print("Двигатель заведен")
self.name = name
self.make = make
self.model = model
Car.car_count += 1
В указанном выше скрипте мы создаем класс Car с одним атрибутом класса под названием car_count и три атрибута экземпляра под названием name, make и model. Класс содержит один метод start(), который содержит наши три атрибута экземпляров. Значения атрибутов экземпляров переданы в качестве аргументов методу start(). Внутри метода start, атрибут car_count увеличен на один.
Стоит упомянуть, что внутри метода, атрибуты экземпляра ссылаются при помощи ключевого слова self, в то время как атрибуты класса ссылаются при помощи названия класса.
Давайте создадим объект класса Car и вызовем метод start().
car_a = Car()
car_a.start("Corrola", "Toyota", 2015) #Двигатель заведен
print(car_a.name) #Corrola
print(car_a.car_count) #1
car_b = Car()
car_b.start("City", "Honda", 2013) # Двигатель заведен
print(car_b.name) # City
print(car_b.car_count) # 2