Я хочу изменить __getattr__
во время создания класса. Например:Изменение __getattr__ во время создания
class AttrTest(object):
def __init__(self):
self.__getattr__ = self._getattr
def _getattr(self, attr):
print("Getting {}".format(attr))
Я бы ожидал вести себя, как:
class AttrTest(object):
def __getattr__(self, attr):
print("Getting {}".format(attr))
Но это не так.
Например, когда я бегу:
>>> at = AttrTest()
>>> at.test
я ожидал бы оба класса для печати Getting test
, но верхний класс бросает AttributeError
.
Can __getattr__
Не может быть изменено таким образом?
Ответный вопрос, который у меня есть, естественно, «почему?» –
@WayneWerner хорошо, у меня есть две реализации '__getattr__', каждая из которых использует различный тип сериализации (json, pickle), и я хотел, чтобы мой класс мог выбрать его при создании экземпляра на основе kwarg. – ballsatballsdotballs
Почему не подклассы? Предположительно, вызывающий абонент знает, что есть, поскольку они устанавливают kwarg –