Python 面向对象中的__init__ 方法怎么理解? - 菜鸟教程
文章推薦指數: 80 %
我们在学习Python 类的时候,总会碰见书上的类中有__init__() 这样一个函数,很多同学百思不得其解,其实它就是Python 的构造方法。
构造方法类似于类似init() 这种初始化 ...
菜鸟教程--学的不仅是技术,更是梦想!
首页
HTML
CSS
JavaScript
Vue
Bootstrap
NodeJS
Python3
Python2
Java
C
C++
C#
Go
SQL
Linux
jQuery
本地书签
首页
HTML
CSS
JS
本地书签
Search
Python3教程
Python2教程
Vue3教程
vue2教程
Bootstrap3教程
Bootstrap4教程
Bootstrap5教程
Bootstrap2教程
Python面向对象中的__init__方法怎么理解?
原文:Pythonsuper()函数
sme000参考文章
直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)。
一开始看到这句话,不太理解。
看了这个文章后,明白了。
我们在学习Python类的时候,总会碰见书上的类中有__init__()这样一个函数,很多同学百思不得其解,其实它就是Python的构造方法。
构造方法类似于类似init()这种初始化方法,来初始化新创建对象的状态,在一个对象呗创建以后会立即调用,比如像实例化一个类:
f=FooBar()
f.init()
使用构造方法就能让它简化成如下形式:
f=FooBar()
你可能还没理解到底什么是构造方法,什么是初始化,下面我们再来举个例子:
classFooBar:
def__init__(self):
self.somevar=42
>>>f=FooBar()
>>>f.somevar
我们会发现在初始化FooBar中的somevar的值为42之后,实例化直接就能够调用somevar的值;如果说你没有用构造方法初始化值得话,就不能够调用,明白了吗?
在明白了构造方法之后,我们来点进阶的问题,那就是构造方法中的初始值无法继承的问题。
例子:
classBird:
def__init__(self):
self.hungry=True
defeat(self):
ifself.hungry:
print'Ahahahah'
else:
print'Nothanks!'
classSongBird(Bird):
def__init__(self):
self.sound='Squawk'
defsing(self):
printself.song()
sb=SongBird()
sb.sing()#能正常输出
sb.eat()#报错,因为songgird中没有hungry特性
那解决这个问题的办法有两种:
1、调用未绑定的超类构造方法(多用于旧版python阵营)
classSongBird(Bird):
def__init__(self):
Bird.__init__(self)
self.sound='Squawk'
defsing(self):
printself.song()
原理:在调用了一个实例的方法时,该方法的self参数会自动绑定到实例上(称为绑定方法);如果直接调用类的方法(比如Bird.__init__),那么就没有实例会被绑定,可以自由提供需要的self参数(未绑定方法)。
2、使用super函数(只在新式类中有用)
classSongBird(Bird):
def__init__(self):
super(SongBird,self).__init__()
self.sound='Squawk'
defsing(self):
printself.song()
原理:它会查找所有的超类,以及超类的超类,直到找到所需的特性为止。
教程列表
ADO教程
Ajax教程
Android教程
Angular2教程
AngularJS教程
AppML教程
ASP教程
ASP.NET教程
Bootstrap教程
Bootstrap4教程
Bootstrap5教程
C教程
C#教程
C++教程
CSS参考手册
CSS教程
CSS3教程
Django教程
Docker教程
DTD教程
ECharts教程
Eclipse教程
Firebug教程
FontAwesome图标
Foundation教程
Git教程
Go语言教程
Google地图API教程
Highcharts教程
HTMLDOM教程
HTML参考手册
HTML字符集
HTML教程
HTTP教程
ionic教程
iOS教程
Java教程
JavaScript参考手册
Javascript教程
jQueryEasyUI教程
jQueryMobile教程
jQueryUI教程
jQuery教程
JSON教程
JSP教程
Julia教程
Kotlin教程
Linux教程
Lua教程
Markdown教程
Matplotlib教程
Maven教程
Memcached教程
MongoDB教程
MySQL教程
Node.js教程
NumPy教程
Pandas教程
Perl教程
PHP教程
PostgreSQL教程
Python3教程
Python基础教程
R教程
RDF教程
React教程
Redis教程
RSS教程
Ruby教程
Rust教程
Sass教程
Scala教程
SciPy教程
Servlet教程
SOAP教程
SQL教程
SQLite教程
SVG教程
SVN教程
Swift教程
TCP/IP教程
TypeScript教程
VBScript教程
Vue.js教程
Vue3教程
W3C教程
WebService教程
WSDL教程
XLink教程
XMLDOM教程
XMLSchema教程
XML教程
XPath教程
XQuery教程
XSLFO教程
XSLT教程
数据结构
正则表达式
测验
浏览器
网站品质
网站建设指南
网站服务器教程
设计模式
在线实例
·HTML实例
·CSS实例
·JavaScript实例
·Ajax实例
·jQuery实例
·XML实例
·Java实例
字符集&工具
·HTML字符集设置
·HTMLASCII字符集
·JS混淆/加密
·PNG/JPEG图片压缩
·HTML拾色器
·JSON格式化工具
·随机数生成器
最新更新
·
JavaScript获取...
·
JavaScript实现...
·
HTMLDOMstyle...
·
HTMLDOMscroll...
·
HTMLDOMscroll...
·
HTMLDOMscroll...
·
Dockerstats命令
站点信息
·
意见反馈
·
免责声明
·
关于我们
·
文章归档
关注微信
Copyright©2013-2022菜鸟教程
runoob.comAllRightsReserved.备案号:闽ICP备15012807号-1
微信关注
延伸文章資訊
- 1一文搞懂python中的__init__的意思及使用场景
__init__普通用法. init只是用来初始化值,但都需要新定义方法来返回这个参数!!! class ClassName(object): def __init__(self, ...
- 2python 物件導向疑問 - iT 邦幫忙
class Dog(): def __init__(self, name, age): # 設定物件本身(self)屬性(.name/age)為 ... 在python中,使用者對於屬性和方法是...
- 3Python 面向对象中的__init__ 方法怎么理解? - 菜鸟教程
我们在学习Python 类的时候,总会碰见书上的类中有__init__() 这样一个函数,很多同学百思不得其解,其实它就是Python 的构造方法。 构造方法类似于类似init() 这种初始化 ...
- 4Python中__init__的通俗解释是什么? - 知乎
但是这两天一直被__init__的用法卡住脚步,总是看不懂其使用方法,看了很多网上资料也没弄清意思,所以希望有大神可以指教一下!谢谢! 查看问题描述. 关注问题 写回答.
- 501 详解Python3中的__init__和__new__的区别
使用Python写过面向对象的代码的同学,可能对__init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候。 ... 这样便是__init__最普通的用法了。