2014-05-11 12:05:42 -04:00
|
|
|
class A:
|
|
|
|
|
|
|
|
var = 132
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
self.var2 = 34
|
|
|
|
|
|
|
|
def meth(self, i):
|
|
|
|
return 42 + i
|
|
|
|
|
|
|
|
|
|
|
|
a = A()
|
|
|
|
print(hasattr(a, "var"))
|
|
|
|
print(hasattr(a, "var2"))
|
|
|
|
print(hasattr(a, "meth"))
|
|
|
|
print(hasattr(a, "_none_such"))
|
|
|
|
print(hasattr(list, "foo"))
|
|
|
|
|
|
|
|
class C:
|
|
|
|
|
|
|
|
def __getattr__(self, attr):
|
|
|
|
if attr == "exists":
|
|
|
|
return attr
|
2018-05-10 09:03:30 -04:00
|
|
|
elif attr == "raise":
|
|
|
|
raise Exception(123)
|
2014-05-11 12:05:42 -04:00
|
|
|
raise AttributeError
|
|
|
|
|
|
|
|
c = C()
|
|
|
|
print(hasattr(c, "exists"))
|
2018-05-10 09:03:30 -04:00
|
|
|
print(hasattr(c, "doesnt_exist"))
|
|
|
|
|
|
|
|
# ensure that non-AttributeError exceptions propagate out of hasattr
|
|
|
|
try:
|
|
|
|
hasattr(c, "raise")
|
|
|
|
except Exception as er:
|
|
|
|
print(er)
|
2015-11-23 10:57:00 -05:00
|
|
|
|
|
|
|
try:
|
|
|
|
hasattr(1, b'123')
|
|
|
|
except TypeError:
|
|
|
|
print('TypeError')
|
|
|
|
|
|
|
|
try:
|
|
|
|
hasattr(1, 123)
|
|
|
|
except TypeError:
|
|
|
|
print('TypeError')
|