详解Python:面向对象编程


Posted in Python onApril 10, 2019

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度

python和java都是面向对象的语言。面向对象编程的特点数据封装、继承和多态

1.类和实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
在python中,定义类同样也是使用class关键字,class后面紧跟着的是类名,需要开头大写,之后的括号里表示的是继承的哪个类,即它的父类。

class Student(object):
  pass

我们可以自由地给这个变量绑定属性

>>>nick.name = 'Liu Ling Hao'
>>>nick.name
'Liu Ling Hao'

而之后定义的不同的函数则是方法。总结来说对象=属性+方法
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。此时就需要用到比较特殊的__init__方法。(int 前后各有两个下划线)
__init__方法的第一个参数永远是self,表示创建的实例本身。

class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = scor
>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59

当有了__init__方法之后,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数

2.封装,继承和多态

面向对象编程的一个重要特点就是数据封装。
就像上面例子中的name和score,我们可以直接在类的内部定义的函数去访问,,比如可以添加一个数据或者对于一个列表进行排序,我们可以实现,但是我们并不知道它的内部是通过如何调节而实现的。

当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

继承的好处就是获得了父类的全部功能,对于子类而言,可以在父类的基础上接着写,更加方便

class Person(object):
  def idea(self):
    print('study is happy')
class Liu(Person):
  pass
liu =Liu()
liu.idea

study is happy

当然子类如果有和父类同样的方法时会自动覆盖掉父类的

多态:不同对象对同一方法响应不同的行动

>>>class Nick1:
  def name(self):
     	 print("我是1")
>>>class Nick2:
  def name(self):
  		 print("我是2") 
>>>a = Nick1()
>>>b = Nick2()
>>>a.name
我是1
>>>b.name
我是2

使用的函数名虽然一样但是实现并不一样。

def run(animal):
  animal.run()
  animal.run()
  >>> run(Animal())
Animal is running...
Animal is running...
>>> run_twice(Dog())
Dog is running...
Dog is running...

多态的好处就是,当我们需要传入Dog或者其它动物时,我们只需要接收Animal类型就可以了,因为Dog都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态

以上所述是小编给大家介绍的Python面向对象编程详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python简单线程和协程学习心得(分享)
Jun 14 Python
python3库numpy数组属性的查看方法
Apr 17 Python
python线程池threadpool实现篇
Apr 27 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
Python urllib.request对象案例解析
May 11 Python
基于python 取余问题(%)详解
Jun 03 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
python爬取股票最新数据并用excel绘制树状图的示例
Mar 01 Python
python实现图片九宫格分割的示例
Apr 25 Python
python 解决微分方程的操作(数值解法)
May 26 Python
5款Python程序员高频使用开发工具推荐
Apr 10 #Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 #Python
Python将json文件写入ES数据库的方法
Apr 10 #Python
pycharm创建一个python包方法图解
Apr 10 #Python
Python socket模块实现的udp通信功能示例
Apr 10 #Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 #Python
一个可以套路别人的python小程序实例代码
Apr 09 #Python
You might like
php加密解密实用类分享
2014/01/07 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
php图像生成函数之间的区别分析
2012/12/06 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
详解angular中的作用域及继承
2017/05/31 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python根据距离和时长计算配速示例
2014/02/16 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
python实现堆栈与队列的方法
2015/01/15 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python3处理word文档实例分析
2020/12/01 Python
python字典按照value排序方法
2020/12/28 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
房地产项目建议书
2014/03/12 职场文书
高中生操行评语
2014/04/25 职场文书
片区教研活动总结
2014/07/02 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
大学学生会辞职信
2015/05/13 职场文书
重阳节简报
2015/07/20 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python