init在python的意思_了解Python的含义和使用场景,一文,搞懂,python,中,init,意思,及

__init__解释

__init__

是构造方法,谁调用,表示谁(更直观的理解就是类的方法中,谁调用,表示谁,见下面第一个代码)!!并不是必选项,也就是说在类中,这个不是必须用的,那什么场景需要用到,什么场景不需要用到呢,下面会做说明!

下面代码是最基本的类定义代码:

class Person:

def __init__(self, name, age):

self.name = name

#self.name,这里的name并不是 def __init__里面的name,这个name可以自定义,但=后面的name就是__init__里面的name了

self.age = age

def test(self):

#谁调用表示谁,就是这种情况,这个test方法调用了这个类中init的name和age,也就是说这个类的name和age表示为test方法

print(self.name,self,age)

class关键字后面跟类的名称就定义了一个类,类的名称可以任意,采用驼峰命名法,也即每个单词的首字母大写,如Book、Person、WildAnimal等

这里的

__init__

方法是一个特殊的方法(init是单词初始化initialization的省略形式),在使用类创建对象之后被执行,用于给新创建的对象初始化属性用。

初始化属性的语句就是

self.name = name

这种了,这一句不太好理解,我们把它改编一下就好理解了:

def __init__(self, n, a):

self.name = n

self.age = a

首先这是一个方法,方法的形参有self,n和a三个。

这个self,表示对象本身,谁调用,就表示谁(这句话不好理解,先记住,我们后面分析)。

语法上,类中的方法的第一个参数都是self,这是和普通方法区别的地方。

这里

self.name = n

self.age = a

表示将外部传来的n和a,赋值给了self对象的name和age属性。

这里的n和a,其实叫什么都可以,但是会有个问题:一般我们调用方法的时候,想自动提示一下或者查看文档看一下这个方法的参数要求,如果形参名都是n、a、m、i这些,会让人摸不着头脑,不知道到底该传入什么样的实参。因为这里我们传入实参是为了给属性赋值,为了能见名知意,将形参的名字定义的跟属性一致,调用者就知道该怎么传参了。

所以才有了上面的写法。

再来说创建对象:

p = Person('小明', 20)

这句话就创建出来了一个具体的人,并且给这个人起了个名字叫小明,指定了小明的年龄为20,并且将小明这个对象赋值给了变量p,此时p就表示小明这个人(对象)

这就造出了一个人。

注:这里的小明和20并不是任意创造的,而是在Person这个函数中定义了2个参数(name,age),所以这必须实例化2个参数!! 另外,在重复一下这个流程吧:定义类(class )-创建方法(对象)(def)——创建实例(绑定属性)(p=类名)——传参(有init的不需要单独传参)-调用

代码如下:

# 定义一个类,使用class关键字

class Student:

pass # 暂时不赋值

#创建类的对象

stu1 = Student() # 创建Student类的一个实例

stu2 = Student()

print(stu1,'自定义类型type:',type(stu1))

print(stu2,'自定义类型type:',type(stu2))

# 为对象绑定属性 (注:需要先给类创建实例)

stu1.name = 'ccx'

stu1.age = 22

stu2.name = 'xgq'

stu2.age = 23

stu2.sex = 'woman'

# 调用

print('stu1的参数:',stu1.name,stu1.age) #打印stu1的参数

print('stu2的参数:',stu2.name,stu2.sex,stu2.age) # 打印stu2的参数

插入:这里就是人们常常调侃的,程序员不需要女朋友,如果需要,就给自己创建一个对象,不,最少要创建10个对象!!! 对象就是传的参

就是这样:

#创建类

class GirlFriend :

#创建方法

def __init__(self,num,name,age,features):

#初始化参数

self.num=num

self.name=name

self.age=age

self.features=features

def MyGirlFriend(self):

print('我的第',self.num,'个女朋友,名字叫',self.name,',她今年',self.age,'岁了,特征是:',self.features,'!!!!',sep='')

# 定义对象

gf1=GirlFriend(1,'刘亦菲',24,'漂亮的脸蛋性感的身材')

gf2=GirlFriend(2,'杨幂',23,'有让人陶醉的声音')

gf3=GirlFriend(3,'汤唯',24,'喜欢没道理')

#调用

gf1.MyGirlFriend()

gf2.MyGirlFriend()

gf3.MyGirlFriend()

用__init__与不用__init__对比

__init__直接输出(不建议这么用)

这种构造方法,在创建对象时会自动调用, 不需要单独调用该方法! 不建议这么用

class ClassName(object):

def __init__(self, name):

# 必须要初始化值

self.name=name

print('ClassName:',self.name,'in run')

p=ClassName('xgq')

__init__普通用法

init只是用来初始化值,但都需要新定义方法来返回这个参数!!!

class ClassName(object):

def __init__(self, name):

self.name=name

def run(self):

print('ClassName_run:',self.name,'in run')

p=ClassName('xgq')

p.run()

不用__init__

#定义类

class Person:

#定义方法

def test(self,name):

print('name is :',self.name,'~!!!')

#定义对象

p=Person()

#传参

p.name='ccx'

#调用

p.test('xgq')

在执行结果中可以看出,用了init就需要在定义对象的时候就赋值,而不用init的话,是不需要再定义对象的时候就赋值,需要单独传参,但是因为在test中定义了name,所以在调用的时候,也需要传一个参数,但如果不用init,在调用的时候传参,是没有任何意义的,因为类中的方法默认接受的参数是单独定义的参数,而不是是调用的时候传的参!!!

总结

反正你需要知道的是,__init__是构造方法,在创建对象时会自动调用,而且构造方法(函数),不支持重载,如果需要给这个类定义参数,就需要用init,反正就不需要用!

下面我给一个 子类继承父类的方法,如果不用init你可以自行尝试是什么结果!!

#定义一个Person类,父类(超类,基类)

class Person:

def __init__(self,name): # 定义私有类

self.name = name

def run(self):#定义一个类函数

print('person:'+ self.name+'正在奔跑啊啊啊')

class Student(Person): #继承自Person

def __init__(self,name,set,age):# 定义私有类

#调用父类的构造方法

# Person.__init__(name) # 方式一:直接指定父类的构造方法

super().__init__(name)# 方式二:使用super(),推荐使用该方法

# 自己类中的构造方法且父类中没有的,直接定义即可

self.set = set

self.age = age

def study(self): #定义一个类函数

print('stadent:' + self.name + '正在学习。。。。')

def show(self):#定义一个类函数

print('name:%s , set:%s,age:%s'%(self.name,self.set,self.age))

#可以自定义n个类函数 。。。

stu = Student('ccx','man',22)

stu.run() #因为继承了父类,当然也可以直接调用父类函数

stu.study()

stu.show()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值