python 2.6.5 中的一个疑似bug
时间:2015-01-29 19:07 来源: 我爱IT技术网 作者:小搜
貌似设置了对象的__getattr__方法后,再使用hasattr检查是否存在某某属性时始终返回true
环境
os : ubuntu 10.4
python : 2.6.5
演示代码
#!/usr/bin/python # -*- coding:utf-8 -*- import sys class Person: #__userName = None __age = None aa = 1 def __init__(self, name): self.__userName = name def __str__(self): if self.__userName is None: return "" else: return self.__userName __repr__ = __str__ def getAge(self): return self.__age def setAge(self, value): self.__age = value def __getattr__(self, name): if name == 'sex': return self.__sex else: return '' person = Person("jim") bTemp = hasattr(person, "test") print bTemp if not bTemp: print "person.test is not exists!" else: print "person.test exist!"
输出信息
True person.test exist!
明明没有test属性,但hasattr却返回了true
解决办法也简单,只要把__getattr方法换成__getattribute__就可以了,代码修改如下
#!/usr/bin/python # -*- coding:utf-8 -*- import sys class Person: #__userName = None __age = None aa = 1 def __init__(self, name): self.__userName = name def __str__(self): if self.__userName is None: return "" else: return self.__userName __repr__ = __str__ def getAge(self): return self.__age def setAge(self, value): self.__age = value def __getattribute__(self, name): #将__getattr__换成__getattribute__ if name == 'sex': return self.__sex else: return '' person = Person("jim") bTemp = hasattr(person, "test") print bTemp if not bTemp: print "person.test is not exists!" else: print "person.test exist!"
输出信息
False person.sex is not exists!
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
