如何忽略Python类属性?

时间:2012-11-21 11:56:03

标签: python python-2.7

如果我们有一个默认参数设置为None的类,如果它们是None,我们如何忽略它们,如果它们不是(或者至少其中一个不是None),我们如何使用它们?

class Foo:
def __init__(self, first=1, second=2, third=3, fourth=None, fifth=None):
    self.first = first
    self.second = second
    self.third = third
    self.fourth = fourth
    self.fifth = fifth
    self.sum = self.first + self.second + self.third + self.fourth + self.fifth
    return self.sum

>>> c = Foo()
Traceback (most recent call last):
File "<pyshell#120>", line 1, in <module>
c = Foo()
File "<pyshell#119>", line 8, in __init__
self.sum = self.first + self.second + self.third + self.fourth + self.fifth
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

2 个答案:

答案 0 :(得分:0)

def __init__(self, first=1, second=2, third=3, fourth=None, fifth=None):
    if first is None:
        first = 0
    else:
        self.first = first

然后它将添加零而没有副作用而不是None

您还可以更改添加它们的部分并首先测试None,但这可能更少输入。

答案 1 :(得分:0)

  class test(object):
    def __setitem__(self, key, value):
        if key in ['first', 'second', 'third', 'fourth', 'fifth']:
            self.__dict__[key]=value
        else:
            pass #or alternatively "raise KeyError" or your custom msg


    def get_sum(self):
        sum=0
        for x in self.__dict__:
            sum+=self.__dict__[x]
        return sum

nk=test()
nk['first']=3
nk['fifth']=5
nk['tenth']=10
print nk.get_sum()

输出:

>>> 8