Python中初始化实例属性(三)

本文介绍了Python中如何使用构造函数__init__方法为Person类实例化时自动绑定name、gender和birth等属性,以及如何使用**kw参数接收并设置额外的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尽管我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办?

在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,这里我们称为构造函数。当创建实例时,构造函数的方法被自动调用,我们就能在此为每个实例都统一加上以下属性:

class Person(object):
    def __init__(self, name, gender, birth):
        self.name = name
        self.gender = gender
        self.birth = birth

构造函数方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。

相应地,创建实例时,就必须要提供除 self 以外的参数:

xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')

有了__init__()方法,每个Person实例在创建时,都会有 name、gender 和 birth 这3个属性,并且,被赋予不同的属性值,访问属性使用.操作符:

print(xiaoming.name)
# 输出 'Xiao Ming'
print(xiaohong.birth)
# 输出 '1992-2-2'

注意: 定义__init__()方法时一定不能忘记了 self 参数,否则会导致整个方法的调用参数位置都不能对应。


任务: 请定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

方法一:

class Person(object):
    def __init__(self, name, gender, birth, job):
        self.name = name
        self.gender = gender
        self.birth = birth
        self.job = job

xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')

print(xiaoming.name)
print(xiaoming.job)

结果为:

Xiao Ming
Student

方法二:

要定义关键字参数,使用 **kw;
除了可以直接使用self.name = 'xxx’设置一个属性外,还可以通过 setattr(self, ‘name’, ‘xxx’) 设置属性。

class Person(object):
    def __init__(self, name, gender, birth, **kw):  # **kw
        self.name = name
        self.gender = gender
        self.birth = birth
        for i, j in kw.items():
            setattr(self, i, j)

xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')

print(xiaoming.name)
print(xiaoming.job)

结果为:

Xiao Ming
Student


大家加油!
学习链接:https://www.imooc.com/code/6169

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值