我想要做到这样的效果:
def __getattr__(self, v):
self.init()
try:
return self.__dict__[v]
except Exception as e:
pass
我这么写,一直错误
1
luguhu 2018-08-06 18:48:46 +08:00 via Android 1
getattr(v, None)?
|
3
luguhu 2018-08-06 19:51:49 +08:00
getattr(obj, v, defult)
obj: 对象 v: 属性名 defult: 默认值 |
4
Trim21 2018-08-06 20:03:52 +08:00 via Android
hasattr()?
|
5
Cheez OP @Trim21 每次调用 hasattr,我的 getattr 魔术方法总会捕捉到错误........心累
|
6
Cheez OP |
7
Trim21 2018-08-06 22:06:36 +08:00
@Cheez #5 是我学艺不精了...
本来就是取不到某个属性的时候才会调用__getattr__ 如果__getattr__被调用了, 而且对应的 key 是一个合法的 key 的话直接初始化高级数据就可以了 |
8
BingoXuan 2018-08-06 22:08:24 +08:00
@Cheez
一楼已经解释得很清楚了。getattr 获取不到给定对象得指定属性时候就回返回 defualt 得值,这个值设为初始化函数调用就是联网获取数据了。如 getattr(a,'no_exist_attribute',requests.get('https://www.baidu.com').content) @luguhu nice |
9
Cheez OP @BingoXuan #8 可是我的用户是这么写代码的:
for v in Question('5546455002').answers(): print(v.content) print(v.author.name) 这两个属性就是高级属性,而且获取完 author 之后,name 还是 author 的高级属性,必须重新获取 |
10
Cheez OP |
11
WilliamYang 2018-08-07 00:38:26 +08:00
感觉你用描述符更好
|
12
Cheez OP @WilliamYang #11 描述符是针对类的,我这里只是属性
|