Python中的__init__作用是什么


Posted in Python onJune 09, 2020

看到Python中有个函数名比较奇特,__init__我知道加下划线的函数会自动运行,但是不知道它存在的具体意义..

Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。

只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。

这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。

同样,注意__del__方法与 destructor 的概念类似。"

恍然大悟原来__init__在类中被用做构造函数,固定写法,看似很死板,其实有道理

def __init__(self, name):
  '''Initializes the person's data.'''
  self.name = name
  print '(Initializing %s)' % self.name
  # When this person is created, he/she
  # adds to the population
  Person.population += 1

name变量属于对象(它使用self赋值)因此是对象的变量

self.name的值根据每个对象指定,这表明了它作为对象的变量的本质。

例如我们定义一个Box类,有width, height, depth三个属性,以及计算体积的方法:

class Box:
  def setDimension(self, width, height, depth):
    self.width = width
    self.height = height
    self.depth = depth
  def getVolume(self):
    return self.width * self.height * self.depth
b = Box()
b.setDimension(10, 20, 30)
print(b.getVolume())

我们在Box类中定义了setDimension方法去设定该Box的属性,这样过于繁琐,而用__init__()这个特殊的方法就可以方便地自己对类的属性进行定义,__init__()方法又被称为构造器(constructor)

class Box:
  #def setDimension(self, width, height, depth):
  #  self.width = width
  #  self.height = height
  #  self.depth = depth
  def __init__(self, width, height, depth):
    self.width = width
    self.height = height
    self.depth = depth
  def getVolume(self):
    return self.width * self.height * self.depth
b = Box(10, 20, 30)
print(b.getVolume())

知识点扩展:

__init__()要点如下:

1.名称固定,必须为__init__()

2.第一个参数固定,必须为self。self指的就是刚刚创建好的示例对象。

3.构造函数通常用来初始化示例属性,如下代码就是初始化示例属性:

4.通过类名(参数列表),来调用构造函数,调用后,将创建好的对象返回给相应的变量。

5.__init__()方法:初始化创建好的对象,初始化指的是:"给实例属性赋值"

6.__new__()方法:用于创建对象,但我们一般无需定义该方法。

以上就是Python中的__init__作用是什么的详细内容,更多关于Python中的__init__到底是干什么的的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python处理xml文件的方法小结
May 02 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
Jan 09 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
Python秒算24点实现及原理详解
Jul 29 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
Python如何调用外部系统命令
Aug 07 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 Python
Python中如何引入第三方模块
May 27 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python函数指定默认值的实例讲解
Mar 29 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 Python
python小白学习包管理器pip安装
Jun 09 #Python
Python小白垃圾回收机制入门
Jun 09 #Python
Python中如何添加自定义模块
Jun 09 #Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 #Python
Python如何避免文件同名产生覆盖
Jun 09 #Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 #Python
Python嵌入C/C++进行开发详解
Jun 09 #Python
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP Google的translate API代码
2008/12/10 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
浅谈PHP封装CURL
2019/03/06 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
python 接收处理外带的参数方法
2018/12/03 Python
python实现动态数组的示例代码
2019/07/15 Python
python 进程的几种创建方式详解
2019/08/29 Python
Python FFT合成波形的实例
2019/12/04 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
"序列点" 是什么
2016/07/29 面试题
信电学院毕业生自荐书
2014/05/24 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android