我正在尝试使用__getattribute__
但是每次调用该方法时都会遇到typeerror,并且该方法没有被执行,是否有摆脱类型错误并执行该方法的方法?
class Person(object):
def __init__(self):
super()
def test(self):
print(1)
def __getattribute__(self, attr):
print(attr)
p = Person()
p.test()
上面的代码给出了错误
test
Traceback (most recent call last):
File "test1.py", line 15, in <module>
p.test()
TypeError: 'NoneType' object is not callable
反正有没有只打印方法名称而不给出错误?
我试图在__getattribute__
方法中捕获typeError,但是它不起作用
另一个问题是,为什么在这里说None Type object is not callable
谢谢!
Ps。我知道我在调用该方法时可以捕捉到该错误,这意味着在__getattribute
方法内是否有任何错误可以解决?因为我的目标是每次调用方法
答案 0 :(得分:1)
首先回答您的第二个问题,为什么说NoneType不可调用。
调用p.test()
时,Python会尝试查找test
实例的p
属性。它会调用您已重写的__getattribute__
方法,该方法将显示“ test”,然后返回。因为您没有返回任何内容,所以它隐式返回None
。因此,p.test
是None
,调用它会得到错误消息。
那么我们该如何解决呢?打印属性名称后,您需要返回要使用的属性。您不能只调用getattr(self, attr)
,否则最终将陷入无限循环,因此您必须调用未覆盖的方法。
def __getattribute__(self, attr):
print(attr)
return super().__getattribute__(attr) # calls the original method