将字典值作为构造函数的参数传递

qwe*_*rty 7 python python-2.7

我是Python的新手.我需要创建一个简单的学生课程,其中包括名字,姓氏,身份证和将课程名称映射到其成绩的字典.

class Student:
    def __init__(self, firstName, lastName, id, _____ (dictionary values)):
        self._firstName = firstName;
        self._lastName = lastName;
        self._id = id;

        self.
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在构造函数中初始化字典值?

例如,假设我想在等级映射中添加3门课程:"数学:100""生物:90""历史:80"

例如:

student1 = Student("Edward", "Gates", "0456789", math: 100, bio: 90, history: 80)
Run Code Online (Sandbox Code Playgroud)

最后3个值应该进入字典.

由于可以作为字典一部分的键值的数量可以变化,我应该在构造函数参数签名中写什么?

我想在调用构造函数时发送所有学生值...

thi*_*dam 8

如果你想添加一个字典,Mathias的回答就足以满足python中的关键字参数.

但是,如果您希望从关键字参数添加对象变量,则需要setattr

例如,如果你想要这样的东西:

student1 = Student("Edward", "Gates", "0456789", {'math': 100, 'bio': 90, 'history': 80})
print student1.math #prints 100
print student1.bio  #prints 90
Run Code Online (Sandbox Code Playgroud)

然后这将做的伎俩:

class Student(object):
    def __init__(self, first_name, last_name, id, **kwargs):
        self.first_name = first_name
        self.last_name = last_name
        self.id = id
        for key, value in kwargs.iteritems():
            setattr(self, key, value)

student1 = Student("Edward", "Gates", "0456789", {'math': 100, 'bio': 90, 'history': 80})
Run Code Online (Sandbox Code Playgroud)

请注意,**kwargs将仅解包像字典或元组元组之类的内容.如果您希望发送没有键的值列表,则应使用*args.点击这里了解更多信息.