python实例属性没有init_Python实例属性的初始化

通过前面的方式定义一个实例的属性非常方便,但也有一些问题。

首先,如果定义属性的过程中使用了不同的属性名字,比如性别,前者使用了sex,后者使用了gender,那对于一个类的不同实例,存储一个信息就用了两个不同的属性,在后面将会难以维护。

其次,名字、性别、年龄等等,都是人的基本信息,在抽象一个类的时候,理应包含这些信息。

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

class Person(object):

def __init__(self, name, sex, age):

self.name = name

self.sex = sex

self.age = age

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

定义类后,就可以相应的实例化对象了,需要注意的是,在实例化的时候,需要提供除self以外的所有参数。

xiaoming = Person('Xiao Ming', 'boy', 13)

xiaohong = Person('Xiao Hong', 'girl', 14)

而访问这些属性的方式和之前的一样:

print(xiaohong.name)

print(xiaohong.sex)

print(xiaohong.age)

# 但当访问不存在的属性时,依然会报错

print(xiaohong.birth)

要特别注意的是,初学者定义__init__()方法常常忘记了 self 参数,比如如下的定义:

class Person(object):

def __init__(name, sex, age):

pass

这种情况下,如果还是如下实例化,将会报错。

xiaoming = Person('Xiao Ming', 'boy', 13)

xiaohong = Person('Xiao Hong', 'girl', 14)

Traceback (most recent call last):

File "", line 1, in

TypeError: __init__() takes 3 positional arguments but 4 were given

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值