Python中同名的两个函数

Python中同名的两个函数,python,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

我需要用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()
是队列的大小。

您不能这样做。至少,不在同一名称空间中(即:同一模块或同一类)。似乎您正在尝试用一种语言学习一些东西,并试图将其应用到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)
我个人认为最好有两个函数,因为它避免了歧义并有助于可读性。例如,
AddCard
addmultiplecard

或者,也许更好,一个单一的功能,您可以使用任何数量的卡。例如,您可以定义
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中函数重载的更多信息,请参见此问题:

基于这是您必须满足的一个事实,如果您可以使用函数,则可以在方法中使用同名函数,即:

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)

这将为您提供相同的输出。我无法遵循您的方法的逻辑,但无论您的方法实际做什么,想法都是一样的。

在Python 2.7中,出于某种原因,您可以这样做:


def xyz():
    print "R"
def xyz():
    print "T"
xyz()

def xyz():
打印“R”
def xyz():
打印“T”
xyz()
如果要运行此函数,结果将是“T”,因此将调用函数的第二个(或最后一个)版本


我偶然发现了这一点,花了很长时间才发现为什么我的程序不起作用

真正的问题是,你为什么要这样做?我在学习计算机科学,我被要求这样做unfortunately@rotemhas,它们都必须是方法吗?
numCards
未在函数中使用。您不能简单地执行
def add_cards(cards):对于cards-in-cards:self.add(card)
?您确定要求“使用相同的名称编写两个函数”吗?或者,是“编写一个可以用两种不同方式调用的函数”的要求吗?我认为OP必须这样做,所以他们别无选择