и посмотреть медиа
Código en una sirena - Codificación Python
и посмотреть медиа
Canal sobre programación en Python y otros idiomas. Explicaciones y códigos simples.
Canal sobre programación en Python y otros idiomas. Explicaciones y códigos simples.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Recurso para aquellos interesados en la programación. Enfóquese en Python, pero también cubre otros temas.
Знаете ли вы, что у объекта нет методов? Методы не хранятся в самом объекте – они хранятся в классе. Обычно у инстанса есть свой __dict__, и при создании он пустой. Когда Python читает obj.x, он ищет по цепочке: сначала в obj.__dict__, потом в __dict__ класса, потом выше по наследованию. Методы находятся на втором шаге – поэтому кажется, что они принадлежат объекту, хотя на самом деле нет. class User: role = "viewer" def greet(self): return f"Hello, {self.role}" u = User() print(u.__dict__) # {} — инстанс пустой print("greet" in u.__dict__) # False — метода здесь нет print("role" in User.__dict__) # True — атрибут класса здесь print("greet" in User.__dict__) # True — метод тоже здесь greet и role определены в классе – там они и лежат. Инстанс u создан пустым: u.__dict__ не содержит ничего, пока не присвоить атрибут явно через u.x = .... Из этого следует кое-что интересное: атрибут, записанный напрямую в __dict__ инстанса, перекрывает обычный одноименный атрибут класса. class User: role = "viewer" u = User() print(u.role) # viewer — Python нашел в User.__dict__ u.__dict__["role"] = "admin" print(u.role) # admin — инстанс перекрыл класс del u.__dict__["role"] print(u.role) # viewer — снова из класса Порядок поиска такой: u.__dict__ -> User.__dict__ -> выше по цепочке. Как только нашел – возвращает. Поэтому запись в __dict__ инстанса как бы затмевает атрибут класса, не удаляя его. class BaseUser: active = True class User(BaseUser): role = "viewer" u = User() print(u.active) # True — нашел в BaseUser.__dict__, прошел всю цепочку u.__dict__["active"] = False print(u.active) # False — инстанс перекрыл print(BaseUser.active) # True — BaseUser.__dict__ не тронут Это стандартный механизм – на нем работают instance variables, которые пишутся через self.x = ... в __init__. Каждый раз это просто запись в obj.__dict__. Но это не вся история. Когда Python находит объект в User.__dict__ – он не всегда возвращает его напрямую. Если у найденного объекта есть метод __get__, Python вызывает его. Именно поэтому u.greet и User.greet возвращают разные вещи – об этом поговорим на следующей неделе. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!