详解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实现定时播放mp3
Mar 29 Python
Python中条件判断语句的简单使用方法
Aug 21 Python
Python基础之函数的定义与使用示例
Mar 23 Python
python flask框架实现重定向功能示例
Jul 02 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python 制作自动化翻译工具
Apr 25 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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
网站当前的在线人数
2006/10/09 PHP
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
js中的string.format函数代码
2020/08/11 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
C#实现启动一个进程
2016/10/01 面试题
体育教师求职信
2014/05/24 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书