2016-08-25 65 views
1

我有這樣的事(我知道這個代碼不工作,但它是什麼,我想實現的更近)方法:的Python - 一類具有可選參數和默認值類成員

class A: 
    def __init__(self): 
     self.a = 'a' 

    def method(self, a=self.a): 
     print a 

myClass = A() 

myClass.method('b') # print b 
myClass.method() # print a 

我到目前爲止已經做了,但我不喜歡它,是:

class A: 
    def __init__(self): 
     self.a = 'a' 

    def method(self, a=None): 
     if a is None: 
      a = self.a 

     print a 

myClass = A() 

myClass.method('b') # print b 
myClass.method() # print a 
+1

嗯,這是規範的解決方案。大多數語言不允許使用'a = self.a'或等價的參數默認值... – deceze

+0

如果您不關心傳入* falsey *值和可能產生的副作用,這種簡寫也會做:'print a or self .a' – deceze

回答

3

默認參數在定義時進行評估。在定義類和方法時,self.a不是。

您的工作代碼示例實際上是實現此行爲的唯一干淨方式。

+0

好的,謝謝。 TBH我覺得它非常冗長,但是我的Python-fu很糟糕,所以如果你說這是乾淨的方法,我會隨它去... – rpadovani

2

缺省值在方法定義時計算,即解釋器執行類體時,通常只發生一次。將動態值分配爲默認值只能在方法體內發生,並且您使用的方法非常好。