属性不存在时返回None

时间:2014-03-20 03:32:35

标签: python class python-2.7 oop attributes

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?

2 个答案:

答案 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