Python 面向对象中的__init__ 方法怎么理解? - 菜鸟教程

文章推薦指數: 80 %
投票人數:10人

我们在学习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 微信关注



請為這篇文章評分?