我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文掌握python中的__init__的意思及使用场景分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文掌握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 = nself.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()

到此这篇关于一文搞懂python中的__init__的意思及使用场景的文章就介绍到这了,更多相关python中的__init__使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文掌握python中的__init__的意思及使用场景分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文掌握python中的__init__的意思及使用场景分析

__init__是构造方法,谁调用,表示谁(更直观的理解就是类的方法中,谁调用,表示谁,见下面第一个代码)!!并不是必选项,也就是说在类中,这个不是必须用的,那什么场景需要用到,什么场景不需要用到呢,感兴趣的朋友跟随小编一起看看吧
2023-02-10

一分钟带你掌握Python中pip的安装与使用方法

目录一、简单介绍二、下载安装三、最常用命令1、显示版本和路径2、获取帮助3、升级 pip4、安装包5、升级包6、卸载包7、搜索包8、显示安装包信息9、列出已安装的包10、查看指定包的详细信息一、简单介绍 pip 是 Python 包管理工具
2022-06-02

Docker中Dockerfile多阶段构建原理及使用场景的示例分析

小编给大家分享一下Docker中Dockerfile多阶段构建原理及使用场景的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!老版本Docker中为什么不支持多个 FROM 指令在17.05版本之前的Docker,只
2023-06-04

一文带你掌握Python中多线程和线程池的使用方法

Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本文将介绍Python中多线程和线程池的使用方法,并提供一些实用的案例供读者参考
2023-05-16

一文搞懂Mysql中的共享锁、排他锁、悲观锁、乐观锁及使用场景

目录一、常见锁类型二、mysql引擎介绍三、常用引擎间的区别 四、共享锁与排他锁五、排他锁的实际应用六、共享锁的实际应用七、死锁的发生八、另一种发生死锁的情景九、死锁的解决方式十、意向锁和计划锁十一、乐观锁和悲观锁总结一、常见锁类型表级锁
2022-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录