У меня есть класс, в котором я добавляю некоторые атрибуты динамически и в какой-то момент хочу восстановить класс в нетронутом состоянии без добавленных атрибутов.Восстановить класс Python до исходного состояния
Ситуация:
class Foo(object):
pass
Foo.x = 1
# <insert python magic here>
o = Foo() # o should not have any of the previously added attributes
print o.x # Should raise exception
Моя первая мысль была создать копию оригинального класса:
class _Foo(object):
pass
Foo = _Foo
Foo.x = 1
Foo = _Foo # Clear added attributes
o = Foo()
print o.x # Should raise exception
Но поскольку Foo просто ссылка на _foo любые атрибуты добавляются к оригиналу _Foo также. Я также пробовал
Foo = copy.deepcopy(_Foo)
в случае, если это поможет, но, по-видимому, это не так.
осветление:
Пользователю не нужно заботиться о том, как реализуются класс. Поэтому он должен иметь те же функции «нормально определенного» класса, то есть интроспекции, встроенной помощи, подклассификации и т. Д. Это в значительной степени исключает что-либо на основе __getattr__
Могу я спросить, почему вы считаете, что это полезно? –
Поскольку у меня есть класс, где я динамически добавляю методы с префиксом по умолчанию (например, «m_» перед всеми добавленными материалами), когда модуль импортируется. Пользователь может захотеть использовать какой-либо другой префикс, поэтому мне нужно «повторно инициализировать» класс. – pafcu
Это звучит как очень сломанная идея. –