class MyClass:
class_attribute = "Это атрибут класса"
def __init__(self, instance_attribute):
self.instance_attribute = instance_attribute
Доступ к ним осуществляется через имя класса: MyClass.class_attribute
.
В Python атрибуты класса определяются двумя основными способами:
Эти атрибуты принадлежат самому классу и доступны всем экземплярам класса. Обычно используются для определения общих свойств или констант.
class MyClass:
class_attribute = "Это атрибут класса"
def __init__(self, instance_attribute):
self.instance_attribute = instance_attribute
print(MyClass.class_attribute) # Вывод: Это атрибут класса
instance = MyClass("Это атрибут экземпляра")
print(instance.class_attribute) # Вывод: Это атрибут класса (доступ через экземпляр)
@classmethod
):
Методы класса могут добавлять или изменять атрибуты класса. Они принимают класс (cls
) в качестве первого аргумента, что позволяет им работать с атрибутами класса.
class MyClass:
class_attribute = "Начальное значение"
@classmethod
def update_class_attribute(cls, new_value):
cls.class_attribute = new_value
print(MyClass.class_attribute) # Вывод: Начальное значение
MyClass.update_class_attribute("Новое значение")
print(MyClass.class_attribute) # Вывод: Новое значение
Важные моменты:
MyClass.class_attribute
), хотя к ним также можно получить доступ через экземпляры класса (instance.class_attribute
). Однако, изменение атрибута через экземпляр может привести к созданию атрибута экземпляра с тем же именем, который "затеняет" атрибут класса.self.instance_attribute
) определяются внутри метода __init__
и принадлежат конкретному экземпляру класса. Каждый экземпляр может иметь свое собственное значение для атрибута экземпляра.Пример с динамическим добавлением атрибута класса:
class MyClass:
pass
MyClass.new_attribute = "Динамически добавленный атрибут"
print(MyClass.new_attribute) # Вывод: Динамически добавленный атрибут
Этот способ показывает, что атрибуты класса можно добавлять и после определения самого класса.