改写类的__getattr__方法
请看如下代码:class Demo:
def __getattr__(self, name):
self.name = 'FishC'
demo = Demo()
print(demo.x)
我预计它的运行结果是 FishC, 但实际上是 None. 为什么? 不是应该return 'FishC'吗
demo实例里没有x成员, 执行之后, 你给demo加了一个成员name, 没有返回值, 直接打印demo.x肯定是没有的 getattr 要配合 setattr 来使用的 1. __getattr__函数类不能使用self.xx, 否则会陷入递归.
2. __getattr__函数需要返回一个函数, 对象或者AttributeError异常, 没有返回表示返回None, 所以你只能获取到None
可以将代码修改为:
class Demo:
def __getattr__(self, name):
return 'FishC'
demo = Demo()
print(demo.x)
__getattr__ 在你访问类属性时会自动调用并返回值
而你重写的__getattr__ 魔法方法没有设置返回值,那么 Python 就默认将返回值设置为 None
在你定义的__getattr__ 中加上 return 即可,参考代码:
class Demo:
def __getattr__(self, name):
self.name = 'FishC'
return self.name
demo = Demo()
print(demo.x)
页:
[1]