2014-11-25 22 views
2

我是初學者。對於學習的緣故,我必須寫一個類在python它接受最多3個不同的參數(A,B,C):像Python類 - 如何創建接受未定義數量參數的類?

class random(object): 

    def __init__(self,a,b,c): 
      blah blah blah 

如何讓這個:

  • 如果沒有參數輸入,它會做一件事。

    例如:

    「測試=隨機()」,在這種情況下假設A = B = C = 0

  • 如果輸入一個參數,它是另一回事。

    例如:

    "test=random(2)", in this case a=2 ,b=c=0, 
    and then run some case specific codes/instrutctions 
    
  • 和等

像如何與內置函數/類 「範圍」,在這裏你可以使用

範圍(9) 範圍(3,9) 範圍(3,9,2)

如果你知道我的意思。

謝謝

回答

4

它看起來像你在問關於Default Argument Values

當定義一個函數或方法,使參數可選的是給他們的默認值的一種方法:

def __init__(self, a=0, b=0, c=0): 

現在,如果我打電話給你的函數(或者,在一個__init__功能的情況下,構建你的類的一個實例),沒有參數,a,bc都將爲0.如果我傳遞1個參數,bc將爲0.依此類推。

請參閱Arbitrary Argument Lists以進行類似的操作。


的方式range作品是有點古怪,因爲第一個參數有不同的含義,如果有隻有1個參數與2個或更多。還有一些這樣的內建,但對你來說不是一個好主意;這些基本上只是出於向後兼容的原因(到Python沒有關鍵字的日子)。

爲了讓事情更有趣,因爲0startstop一個完全有效的值,因此甚至None,你必須構造一些特殊的價值,沒有人可以合理地與你擦肩而過。 (這部分,你實際上可能需要效仿某一天。)所以,它看起來像這樣:

class range(object): 
    _sentinel = object() 
    def __init__(self, start_or_stop, stop=range._sentinel, step=None): 
     if stop is range._sentinel: 
      start, stop = None, start_or_stop 
     else: 
      start = start_or_stop 
     # Now you can use start, stop, step 
相關問題