class test(object):
def __init__(self, a = 0):
test.a = a
t = test()
print test.a ## obviously we get 0
''' ====== Question ====== '''
print test.somethingelse ## I want if attributes not exist, return None. How to do that?
答案 0 :(得分:10)
首先,您要将变量添加到类test.a = a
。您应该将其添加到实例self.a = a
。因为,当您向类添加值时,所有实例都将共享数据。
您可以使用__getattr__
这样的功能
class test(object):
def __init__(self, a = 0):
self.a = a
def __getattr__(self, item):
return None
t = test()
print t.a
print t.somethingelse
从__getattr__
文档引用
当属性查找未在常规位置找到属性时调用(即,它不是实例属性,也不是在类树中找到自己)。 name是属性名称。
注意: __getattr__
优于__getattribute__
的优势在于,__getattribute__
将始终被调用,我们必须手动处理,即使当前对象具有属性。但是,如果在层次结构中找到属性,__getattr__
将不。
答案 1 :(得分:1)
您正在寻找__getattribute__
挂钩。这样的事情应该做你想做的事情:
class test(object):
def __init__(self, a = 0):
self.a = a
def __getattribute__(self, attr):
try:
return object.__getattribute__(self, attr)
except AttributeError:
return None