2012-11-21 57 views
1

如果我們有一個默認參數設置爲None的類,如果它們是None,我們如何忽略它們,如果它們不是(或者它們中的至少一個不是None),那麼使用它們?如何忽略Python類屬性?

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'? – ecatmur

回答

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第一,但這個是打字可能不太。

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