当前位置: 首页 > news >正文

【python进阶篇】面向对象编程(1)

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

一.对象(Object)

一个对象具有两个特征:

  • 属性

  • 方法

我们可以举个例子,比如人:

  • 属性:肤色、体重、发型等

  • 方法:打游戏、跑步、游泳等

总之一句话总结就是:属性=对象有什么,方法=对象会什么。

关于对象的代码实例,接下来在介绍类的时候一并说明。

二.类(class)

1.创建类和对象

语法:

class 类名:属性方法

说明:
类是抽象的模板,在Python中,定义类是通过class关键字

实例:

class person:name = "小红"       ##name属性age = 20             ##age属性def sport(self):                 ###sport方法print('运动真开心')w = person()   ###创建类的对象

这边我们创建了一个类,并给这个类添加了属性及方法,然后我们还创建了一个类的对象并赋给了变量W,接下来我们来试下调用我们的属性及方法。

执行对象的方法:

w.sport()

输出:

执行对象的属性:

w.name

输出:

2.self是什么?

(1)self即代表着实例(对象)本身

(2)名字不一定必须叫self,可以叫she或者he,但是按照约定我们还是使用self

3.类的初始化:

我们可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__(两个下划线)方法来实现, 这个方法不需要被调用,只要创建对象就会自动执行。

实例:

class person:def __init__(self):self.name = "小红"       ##name属性self.age = 20             ##age属性print('程序开始执行啦')def sport(self):                 ###sport方法print('运动真开心')w = person()   ###创建类的对象

输出:

三.类的三大特性

三大特性:封装、继承、多态

1.封装

在Python中使用OOP,我们可以限制对方法和变量的访问。这样可以防止数据直接修改(称为封装),在Python中,我们使用下划线作为前缀来表示私有属性,即单“ _”或双“ __

class person:def __init__(self):self.__age = 20   def change(self):print(self.__age)w = person()
w.change()w.__age

输出:

这边显示已经无法从外部访问,这样就确保了外部代码不能随意修改对象内部的状态。

2.继承

继承是一种创建新类的方法,用于在不修改现有类的细节的情况下使用它。

我们直接通过实例来了解下:
 

class A:  ##父类def __init__(self):print("自动执行")def a(self):print("执行程序A")class B(A):    ##子类def b(self):print('执行程序B')B_A = B()
B_A.a()   ##调用父类的方法
B_A.b()   ##调用子类的方法

输出:

通过上面的实例,我们可以看出,子类继承了父类的功能,调用子类的属性及方法。

3.多态性

多态性是一种功能(在OOP中),可以将公共接口用于多种形式(数据类型)。

直接看实例:
 

class A:def a(self):print("执行程序A")class B:def a(self):print('执行程序B')class C:def a(self):print('执行程序C')def select(aa):aa.a()select(A())
select(B()) 
select(C())   

输出:

在上面的程序,我这边定义了A、B、C三个类,它们每个都有通用的a()方法,但是,它们的功能不同,为了允许多态,我们创建了通用接口,即select()可以接受任何对象的函数,然后传递对象即可运行。

四.总结

面向对象编程让编程变得简单而有效,让编程人员的生产力提高。喜欢的朋友后续可以再来看看其他的进阶内容,谢谢。

http://www.lryc.cn/news/313584.html

相关文章:

  • 力扣面试经典150 —— 6-10题
  • [密码学]入门篇——加密方式
  • 构建前后端分离项目常用的代码
  • 2575. 找出字符串的可整除数组(Go语言)
  • Redis与 Memcache区别
  • #QT(智能家居界面-界面切换)
  • js拓展-内置对象
  • 【李沐精读系列】GPT、GPT-2和GPT-3论文精读
  • Libevent的使用及reactor模型
  • 查看Linux服务器配置
  • 【机器学习】包裹式特征选择之递归特征添加法
  • 解决cs不能生成Linux木马的问题
  • vue3组件通信方式
  • 前端实现生成图片并批量下载,下载成果物是zip包
  • android 快速实现 圆角矩形控件 及 圆形控件
  • 【Python】外网远程登录访问jupyter notebook+pycharm使用ipython
  • error:0308010C:digital envelope routines::unsupported
  • Vue前端的工作需求
  • 97. 常用的HTTP服务压测工具
  • 活动预告|听云猿生数据创始人 CEO 曹伟分享云数据库行业十余年经验总结
  • 数仓实战——京东数据指标体系的构建与实践
  • Alias许可配置
  • 【读书笔记】针对ICS的ATTCK矩阵详解(一)
  • Rust多线程访问数据,推荐使用mutex还是channel?
  • 基于pytorch的手写体识别
  • Leetcode 56. 合并区间
  • C++:List的使用和模拟实现
  • 20个Python函数程序实例
  • Wireshark——获取捕获流量的前N个数据包
  • 006-浏览器输入域名到返回