Обложка канала

Библиотека Python разработчика

20835 @BookPython

Библиотека Python разработчика. Книги по программированию на Python.

Библиотека Python разработчика

4 года назад
Открыть в
Python allows you to dynamically change a class of an already created object. It's simple as that: obj.__class__ = AnyClass Though it's probably a bad idea to use such tricks as part of your regular architecture, it can be extremely useful during debugging. Here is how you can track all attribute accesses of an object without modifying its original code: class User: def __init__(self, name): self._name = name def to_str(self): return '<{}>'.format(self._name) class LoggedUser(User): def __getattribute__(self, attr): print('`{}` accessed'.format(attr)) return super().__getattribute__(attr) u = User('lol') u.__class__ = LoggedUser print(u.to_str())