我希望在实例化类时更改__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
。
这样可以__getattr__
不能改变吗?
答案 0 :(得分:3)
对于像__getattr__
这样的特殊方法,Python会在基础__dict__
中搜索,而不是在实例__dict__
中搜索。
您可以在数据模型文档的special lookup部分中阅读有关此内容的更多详细信息。
我有两个
__getattr__
的实现,每个都使用不同的实现 序列化的类型(json,pickle),我希望我的课能够 根据kwarg选择一个。
这不是覆盖__getattr__
的好用例。放弃这个想法,而是考虑使用@property
或descriptors动态处理序列化。