2014-01-26 57 views
0

Python中是否有方法將參數設置爲可選(忽略它,就好像它不存在一樣)?將參數設置爲可選

我的意思是,假設你有一個類,如:

class RandomClass(): 

    def __init__(self, x, y, z): 
     self.x = x 
     self.y = y 
     self.z = z 

    def __str__(self): 
     return str(self.lst()) 

    def lst(self): 
     return [self.x, self.y, self.z] 

,並嘗試運行此:

r1 = RandomClass(1,2,3) 
r1.lst() 
[1, 2, 3] 
print(r1) 
[1, 2, 3] 

這個工程,但如果你嘗試類似:r1 = RandomClass(1,2)它會失敗。

因此,如果設定參數是可選的,可以那麼這些應該很好地工作:

r1 = RandomClass(1,2) 
r1 = RandomClass(1,2,3) 

示例(假設z被設定爲可選)然後:

r1 = RandomClass(1,2) 
    r1.lst() 
    [1, 2, None] 
    print(r1) 
    [1, 2, None] 

我可選參數設置爲如果不使用,則放置None,但它可以是任何東西,如0,2等,以識別未被使用的東西。

那麼你認爲這甚至有可能嗎?

回答

2

您可以將默認值設置爲參數。在這種情況下,您希望z可以由用戶授予或不授予。所以,你可以在用戶提供了2個參數的構造函數的默認值設置爲None

class RandomClass(object): 
    def __init__(self, x, y, z=None): 
     self.x = x 
     self.y = y 
     self.z = z # here, z will be None if only 2 arguments are passed 

    # other methods... 


[...] 
>>> r1 = RandomClass(1,2) 
>>> r1.lst() 
[1, 2, None] 

確保可選參數總是在參數列表的末尾(這是不可能寫類似__init__(self, x=None, y, z)) 。我建議你閱讀本教程:Using Optional and Named Arguments,從http://www.diveintopython.net/

+0

感謝馬克西姆!沒有意識到我可以給參數中的變量分配一個默認值。 – Sc4r

0

下面是一個示例方法中,具有兩個可選的參數的函數:

def method(noDefault, arg1=10, arg2=1): 

「ARG1」「ARG2」是可選,因爲它們具有定義默認值。

「noDefault」是必需的,因爲它有沒有默認值

如果「方法」 是稱爲與只有一個參數,以下將發生
ARG1默認爲10個
ARG2缺省值爲1

如果方法被稱爲有兩個參數
ARG2仍然默認爲1

相關問題