我有一个类,其中__getattr__
的实现方式很简单,如下所示:
def __getattr__(self, item): return self.__dict__[item]
我看到的问题是,许多Python库(例如numpy
和pandas
)都试图使用此语句嗅探我的对象是否有名为__array__
的内容
hasattr(obj, '__array__`)
但我的目标是向他们抛出一个错误,说不存在这样的属性.
我的困境是:如何让我的类在hasattr
中表现良好(返回False),而不是抛出错误,同时,如果任何人想要一个不存在的属性,就抛出一个错误(即,我仍然希望在任何其他情况下抛出该错误).
编辑:按要求复制代码:
class A:
def __getattr__(self, item): return self.__dict__[item]
a = A()
hasattr(a, "lol")
回溯:
File "<ipython-input-31-b7d3ffac514f>", line 4, in <module>
hasattr(a, "lol")
File "<ipython-input-31-b7d3ffac514f>", line 2, in __getattr__
def __getattr__(self, item): return self.__dict__[item]
KeyError: 'lol'