繁体   English   中英

python如何将多个参数传递给类而不需要它们

[英]python how to pass multiple parameters to class without making them required

好的,所以我对python还是很陌生,我正在SF的社区中心免费上课,所以是的,这是“作业”,但它不是上学的,所以请明确。

好的,我们正在进行运算符重载,但是我有一个问题与类中的参数有关。 我的想法可能完全偏离了轨道,因此任何帮助都将非常有用。

这是我到目前为止的课程代码

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,pennys = 100),以便将其添加到字典对象中。 我需要同时传递键和值(四分之一是键,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)

如果仅将参数设为所有关键字,则会更简单。 然后,您可以将未设置的单个硬币数量设置为默认值:

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

您可能还应该验证,除了允许的硬币以外,没有给出任何其他关键字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM