Атрибуты классов и статические методы
@ProgHelpBotАтрибуты класса
В классе может быть определены атрибуты класса. Подобные атрибуты определяются в виде переменных уровня класса и являются общими для всех объектов класса.
[Класс].[атрибут класса] # обращение к атрибуту класса внутри класса [объект].[атрибут класса] # обращение к атрибуту класса у конкретного объекта вне класса
Пример:
class Person:
default_name = "Anonymous"
def __init__(self, name):
if name: self.name = name
else: self.name = Person.default_name
alex = Person("Alex")
bill = Person("")
print(alex.name, bill.name) # Alex Anonymous
Person.default_name = "Undefined" # изменяем атрибут класса для всех объектов
print(alex.default_name, bill.default_name) # Undefined Undefined
bill.default_name = "Bill" # изменяем атрибут класса только для объекта bill
print(alex.default_name, bill.default_name) # Undefined Bill
Статические методы
Статические методы относятся к классу в целом и определяют поведение, которое не зависит от конкретного объекта. Для их определения используется аннотация @staticmethod.
class Person:
__type = "Person" # приватный атрибут
@staticmethod
def print_type():
print(Person.__type)
alex = Person()
alex.print_type() # Person
Person.print_type() # Person