Как в классах хранятся атрибуты и методы ?

Спросят с вероятностью 3%



Атрибуты и методы классов хранятся в специальном словаре, который называется dict. Этот словарь содержит все атрибуты и методы экземпляра или класса.



Атрибуты и методы экземпляра



Когда мы создаем объект класса, для него создается словарь атрибутов экземпляра, где хранятся все данные, специфичные для этого объекта.



Пример

class MyClass:

class_attr = 42



def __init__(self, value):

self.instance_attr = value



def instance_method(self):

return f"Instance attribute: {self.instance_attr}"



@classmethod

def class_method(cls):

return f"Class attribute: {cls.class_attr}"



# Создание экземпляра класса

obj = MyClass(10)



# Доступ к словарю атрибутов экземпляра

print(obj.__dict__) # Выведет: {'instance_attr': 10}



# Доступ к атрибуту экземпляра

print(obj.instance_attr) # Выведет: 10



# Вызов метода экземпляра

print(obj.instance_method()) # Выведет: Instance attribute: 10




Атрибуты и методы класса




Хранятся в словаре класса. Этот словарь можно получить через атрибутnt(obj.insсамого класса.




Пример

# Доступ к словарю атрибутов класса

print(MyClass.__dict__)



# Выведет что-то подобное (фактический вывод может варьироваться):

# {

# '__module__': '__main__',

# 'class_attr': 42,

# '__init__': <function MyClass.__init__ at 0x7f941d8e0d30>,

# 'instance_method': <function MyClass.instance_method at 0x7f941d8e0dc0>,

# 'class_method': <classmethod object at 0x7f941d8e0d90>,

# '__dict__': <attribute '__dict__' of 'MyClass' objects>,

# '__weakref__': <attribute '__weakref__' of 'MyClass' objects>,

# '__doc__': None

# }



# Доступ к атрибуту класса

print(MyClass.class_attr) # Выведет: 42



# Вызов метода класса

print(MyClass.class_method()) # Выведет: Class attribute: 42




Динамическое добавление атрибутов и методов



Могут быть добавлены динамически как для экземпляра, так и для класса.



Пример для экземпляра


obj.new_attr = "I am new!"

print(obj.__dict__) # Выведет: {'instance_attr': 10, 'new_attr': 'I am new!'}

print(obj.new_attr) # Выведет: I am new!




Пример для класса

def new_class_method(cls):

return "This is a new class method"



MyClass.new_class_method = classmethod(new_class_method)



print(MyClass.new_class_method()) # Выведет: This is a new class method




Атрибуты и методы экземпляра хранятся в словаре __dict__ экземпляра, а атрибуты и методы класса — в словаре с вероятнкласса. Эти словари позволяют динамически добавлять и изменять атрибуты и методы.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых