2015-12-31 243 views
1

您好我正在學習計算機科學,我有一個要求,我必須在python中編寫兩個具有相同名稱的函數。我應該怎麼做?兩個函數相同的名字python

class QueueCards: 
    def __init__(self): 
     self.cards = [] 

    def Add(self, other): 
     self.cards.insert(0, other) 

    def Add(self, listCards, numCards): 
     for i in numCards: 
      card = listCards.GetCard(i) 
      self.Add(card) 

Count()是隊列的大小。 謝謝。

+6

真正的問題是,_why_你會這麼做嗎? – Lafexlos

+2

我正在學習計算機科學,我被要求不幸地做到這一點 – rotemhas

+0

它可以做到,它只是不漂亮,你可能不得不使用專門設計來做到這一點的包。看看下面的答案,它對你的問題有一個很好的解決方案。 –

回答

8

你不能這樣做。至少,不在同一個命名空間(即:相同的模塊或同一類)。看起來你正在嘗試使用一種語言來學習一些東西,並試圖將它應用於python。

你可以做什麼,而不是是有Add帶有可變數量的參數,所以你可以根據什麼在通過做不同的事情。

def Add(self, *args): 
    if len(args) == 1: 
     item = args[0] 
     self.cards.insert(0, item) 

    elif len(args) == 2): 
     listCards, numCards = args 
     for i in numCards: 
      card = listCards.GetCard(i) 
      self.cards.insert(0, card) 

我個人認爲這是最好有兩個功能,因爲它避免了歧義和艾滋病的可讀性。例如,AddCardAddMultipleCards。或者,甚至更好,您可以使用任何數量的卡片的單個功能。例如,您可以定義Add採取卡的列表,並添加他們都:

def Add(self, *args): 
    for card in args: 
     self.cards.insert(0, card) 

然後,無論是單卡叫它:

self.Add(listCards.GetCard(0)) 

...或者,一個卡片列表:

list_of_cards = [listCards.GetCard(i) for i in range(len(listCards))] 
self.Add(*list_of_cards) 

你看起來是被要求做的是叫做函數重載,這根本不是Python支持的東西。有關函數重載在Python更多信息,請參見該問題:Python function overloading

+0

我認爲OP必須這樣做,所以他們別無選擇 –

+0

非常感謝 – rotemhas

1

基於這樣的事實它是一個要求你必須履行,如果你可以使用一個功能,您可以在該方法中使用函數名稱相同即:

def Add(cards, item): 
    cards.insert(0, item) 

class QueueCards: 
    def __init__(self): 
     self.cards = [] 
    def Add(self, listCards, numCards): 
     for i in [1, 2, 3]: 
      Add(self.cards, 4) 



q = QueueCards() 

q.Add(q.cards, 4) 
print(q.cards) 

[4, 4, 4] 

或者你也可以通過實例並通過實例訪問列表:

def Add(inst, item): 
    inst.cards.insert(0, item) 

class QueueCards: 
    def __init__(self): 
     self.cards = [] 

    def Add(self, listCards, numCards): 
     for i in [1, 2, 3]: 
      Add(self, numCards) 


q = QueueCards() 

q.Add(q.cards, 4) 
print(q.cards) 

這將使你同樣的輸出。我無法遵循你的方法的邏輯,但無論你的方法實際上做什麼,這個想法都是一樣的。

相關問題