Python如何向类传递多个参数而不强制要求

0 投票
1 回答
3184 浏览
提问于 2025-04-17 16:41

好的,我刚开始学Python,现在在旧金山的一个社区中心上免费的课程,所以这算是“作业”,但不是学校的作业,所以请详细解释一下。

我们正在学习运算符重载,但我有一个关于类中参数的问题让我很困惑。我可能完全想错了,所以任何帮助都非常感谢。

这是我目前写的类的代码:

class CoinPurse(object):

    def __init__(self, quarters=0, dimes=0, nickels=0, pennies=0):
        self.purse ={'quarters': 0, 'dimes': 0, 'nickels': 0, 'pennies': 0}

    def __setitem__(self, quarters, dimes, nickels, pennies):
        self.purse ={'quarters': quarters, 'dimes': dimes, 'nickels': nickels, 'pennies': pennies}

    def amount(self):
        """ Return the amount of money as a floating point value """
        self.purseamount = 0
        self.purseamount = self.purseamount + ((self.purse['quarters']) * 25)
        self.purseamount = self.purseamount + ((self.purse['dimes']) * 10)
        self.purseamount = self.purseamount + ((self.purse['nickels']) * 5)
        self.purseamount = self.purseamount + self.purse['pennies']
        self.purseamount = float(self.purseamount) / 100

        return float(self.purseamount)

    def quarters(self):
        """ Returns the number of quarters as an integer """

        return int(self.purse['quarters'])

    def dimes(self):
        """ Returns the number of quarters as an integer """

        return int(self.purse['dimes'])

    def nickels(self):
         """ Returns the number of quarters as an integer """

        return int(self.purse['nickels'])

    def pennies(self):
        """ Returns the number of quarters as an integer """

        return int(self.purse['pennies'])

好的,这里是一个测试,用来使用这个类。以后我还需要做很多其他的事情,但现在我只想确保基本功能正常。

x = CoinPurse(quarters=5, pennies=100)
print x.amount()
print x.quarters()
print x.pennies()

我的问题是,我知道我没有正确使用setitem,我该如何传递参数(quarters=5, pennies=100),以便它们可以被添加到字典对象中。我需要同时传递键和值(quarters是键,5是值)……我对此感到迷茫,直到弄清楚这个问题我都无法继续。

顺便说一下,我不能改变x = CoinPurse(quarters=5, pennies=100),这个写法必须保持不变。

**根据建议编辑后的代码:

class CoinPurse(object):

    def __init__(self, **kwargs):
        self.pquarters = kwargs.get('quarters', 0)
        self.pdimes = kwargs.get('dimes', 0)
        self.pnickels = kwargs.get('nickels', 0)
        self.ppennies = kwargs.get('pennies', 0)


    def amount(self):
        """ Return the amount of money as a floating point value """
        self.purseamount = 0
        self.purseamount = self.purseamount + (self.pquarters * 25)
        self.purseamount = self.purseamount + (self.pdimes * 10)
        self.purseamount = self.purseamount + (self.pnickels * 5)
        self.purseamount = self.purseamount + self.ppennies
        self.purseamount = float(self.purseamount) / 100

        return float(self.purseamount)

    def quarters(self):
        """ Returns the number of quarters as an integer """

        return int(self.pquarters)

    def dimes(self):
        """ Returns the number of quarters as an integer """

        return int(self.pdimes)

    def nickels(self):
        """ Returns the number of quarters as an integer """

        return int(self.pnickels)

    def pennies(self):
        """ Returns the number of quarters as an integer """

        return int(self.ppennies)

1 个回答

1

如果你把所有的参数都设成关键字,那就简单多了。这样的话,如果没有提供某个硬币的数量,你可以给它设置一个默认值:

def __init__(self, **kwargs):
    quarters = kwargs.get('quarters', 0)
    # etc. for other coins

你还应该检查一下,确保没有其他不允许的关键字被使用。

撰写回答