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

Python --- 面向对象

目录

前言:

一、面向对象OOP

1.面向对象

1)面向对象介绍

2.类与对象

1)类

2)对象

3)类与对象的关系

3.类的构成

1)类的构成

2)类的定义

3)创建对象

4)类的构成

4.self 参数

5.牛逼的方法

1)__init__() 方法

2)__str__() 方法

6.私有属性与私有方法

1)私有属性与私有方法介绍

2)私有属性

3)私有方法

二、面向对象三大特性

1.封装

1)封装介绍

 2.继承

1)继承介绍

2)继承语法

3)单继承

4)重写

5)super

6)多继承

3.多态

三、常用魔法方法

1.魔法方法介绍

2.常用魔法方法

1)__new__() 方法

2. __del__() 方法


前言:

Python 是一种面向对象的编程语言。

Python 中的几乎所有东西都是对象,拥有属性和方法。

一、面向对象OOP

二、面向对象三大特性

三、常用方法

一、面向对象OOP

1.面向对象
 

1)面向对象介绍

面向对象编程:Object Oriented Programming,简称OOP,是一种 程序设计思想
注意:
与之对应的是面向过程编程思想。实际上,能够使用面向对象编程思想实现的程序,也
都能通过面向过程完成。只是看哪种思想更适合当前开发需求。
面向过程与面向对象区别:
  • 面向过程:根据业务逻辑从上到下写代码
  • 面向对象:将数据与函数绑定到一起,进行封装减少重复代码的重写过程

2.类与对象

1)类

类是抽象的概念,仅仅是模板。用来描述具有相同属性和方法的对象的集合。比如:"人"是一
个类。

2)对象

某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。 比如:"胡歌"就是一个对象。

3)类与对象的关系

那么实际上,我们可以进行 对象归类

3.类的构成

1)类的构成

类主要由 3 部分构成: 3 个部分构成
类的 名称 ->> 类名
类的 属性 ->> 一组数据
类的 方法 ->> 允许对类进行操作的方法

2)类的定义

Python 中使用 class 关键字来定义类,其基本结构如下:
class 类名:
    pass

eg:使用名为 x 的属性,创建一个名为 MyClass 的类

class Myclass:
    x = 1

3)创建对象

在 Python 中,可以根据已经定义的类去创建出一个个对象,语法如下:
对象名 = 类名()

eg:创建一个名为 p1 的对象,并打印 x 的值:

class Myclass:
    x = 1

p1 = Myclass()
print(p1.x)

输出:
1

4)类的构成

eg1:实现以下操作
        创建类:学生类
        创建对象:张三
        在类中定义方法输出:张三学习Python

4.self 参数

1)self 参数介绍
在类当中定义方法时,会发现系统帮我们自动创建了 self 参数,并且在调用对象的该方法时,也无
需传入 self 参数。那这个 self 是什么?
 
实际上,我们需要明确 self 的两个概念
  • self 本身是 形参
  • self 就是 对象本身
一、self 参数介绍
eg1:实现以下操作
        定义类为:学生类
        创建对象:李四
        在类中定义方法:打印李四信息

5.牛逼的方法

1)__init__() 方法

__init__() 方法称为 初始化 方法,也可称为 构造方法 。在 创建对象 时,会 自动执行该方法 ,为对象
的属性设置初始值。
eg1:如以下代码,会先输出--1--,还是先输出--2--?
class Student():
    def _init_(self):
        print("---1---")

bruin = Student()
print("--2--")

输出:

--2--

注意:in_init_()方法只是为对象的属性赋初值,不会有打印输出等的作用.

2)__str__() 方法

如果在开发中,希望打印输出对象变量时, 能够打印自定义的内容 。就可以使用__str__()方法,将
自定义内容通过return关键字返回。
注意:返回值必须是字符串。

6.私有属性与私有方法

1)私有属性与私有方法介绍

在实际开发中,对象的某些属性或者方法,只希望在对象的内部使用,这时,我们就可以使用私有属性和私有方法。

2)私有属性

私有属性:就是对象不希望公开的属性
定义方式:在属性名前面增加两个下划线(例如:__name)

eg1:一定要在类的外部访问到对象的私有属性,如何实现?
方法:
  • 可以通过类的内部的方法访问私有属性
  • 通过类的内部方法将私有属性返回出去
  • 在类的外部调用该方法并且接收就可

3)私有方法

私有方法:就是对象不希望公开的方法
定义方式:在方法名前面增加两个下划线(例如:__test)
注意:
在 python 中,并没有真正意义上的私有,只有伪私有。当我们在访问时,以 对象._类名__私有属
性 即可访问,私有方法同理。但是不建议使用。

二、面向对象三大特性

1.封装

1)封装介绍

封装是面向对象编程的一大特点,将 属性 方法 放到 类的内部 ,通过对象访问属性或者方
法,隐藏功能的实现细节,也可以设置访问权限。

 2.继承

1)继承介绍

继承是一种创建新类的方式,如果子类需要 复用父类 的属性或者方法时,就可以使用继承。
当然,子类也可以提供自己的属性和方法。

 作用:避免重复造轮子,减少代码的冗余

2)继承语法

语法:
class Father(object):
    pass

class Son:
    pass
注意:在 Python3 中,都默认继承 object 基类。

3)单继承

子类继承父类,则可以直接享受父类中已经封装好的方法
总结:当对象调用方法时,查找顺序先从自身类找,如果自身没找到,则去父类找,父类无,
再到父类的父类找,直到object类,若还无,则报错。这也称为 深度优先机制

 

4)重写

注意:当 子类 与 父类 拥有同名称的方法时,子类对象调用该方法 优先执行自身 的方法。那
么实际上就是子类的方法 覆盖 父类的方法,也称为 重写
问题:实际的开发中,遵循开放封闭原则。我们并不会完全的重写父类的方法,而是希望同时
实现父类的功能。

5)super

super() 函数是用于调用父类的一个方法。
语法: super().方法名()

6)多继承

所谓多继承,即子类有多个父类,并且具有它们的特征。
情景1:

 

  • 遵循左边优先原则
情景2:
  •  左边一条路走到黑

 情景3:

  •  1.左边优先 2.根最后执行

3.多态

多态的概念是应用于 Java 和 C# 这一类强类型语言中,而Python崇尚"鸭子类型"。
动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语
言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像
鸭子”,那它就可以被看做是鸭子。
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

三、常用魔法方法

1.魔法方法介绍

在 Python 中,有一些内置好的特定方法,这些方法在进行特定的操作时会 自动 被调用,称
魔法方法
魔法方法的命名总是被双下划线包围,比如: __名称__

2.常用魔法方法

1)__new__() 方法

__new__() :用于 创建 返回 一个对象,在类准备将自身实例化时调用。

class Demo(object):
    def __init__(self):
        print("__init__")

    def __new__(cls, *args, **kwargs ):
        print("__new__")

d = Demo()


# __new__
解析
  • __new__() 方法用于创建对象
  • __init__() 方法在对象创建的时候,自动调用。
  • 此处重写了父类的 __new__() 方法,覆盖了父类 __new__() 创建对象的功能,所以对象并没有创建成功。所以仅执行 __new__() 方法内部代码
对象创建执行顺序
1. 通过 __new__() 方法创建对象
2. 并将对象返回,传给 __init__()
eg1:在自定义类中实现创建对象
思路:
  • 重写父类 __new__() 方法
  • 并且在该方法内部,调用父类的 __new__() 方法
__init__() 与 __new__() 区别
  •  __init__ 实例方法,__new__ 静态方法
  • __init__ 在对象创建后自动调用,__new__ 创建对象的方法

2. __del__() 方法

__del__() :叫做析构方法。当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行。
注意
  • 当代码 全部执行完毕 自动 触发__del__()
  • 如果需要提前触发,则需要通过 del 关键字,删除所有对象后触发__del__()
注意
此方法一般不需要定义,因为 Python 是一门高级语言,程序员在使用时无需关心内存的分配与释放,一 般都是交给 Python 解释器来执行。所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行。

相关文章:

  • C语言经典题目之汉诺塔问题超详解(4000字数只为能让你听懂这个题目)
  • 信号线上串接电阻的作用
  • OpenFeign的实现原理(附Feign和OpenFeign的区别)
  • 不同性质生物素叠氮试剂Biotin-azide,Biotin-PEG2/PEG3/PEG4-azide特点分享
  • 【Linux】信号
  • 网络协议:透彻解析HTTPS协议
  • 编译 mesa
  • 健身房信息管理系统(PHP+Html+MySQL)
  • 什么是蜂窝移动网络?
  • 全志V853 NPU 系统介绍
  • Jupyter Notebook 换个主题清爽了很多
  • 【C++】红黑树
  • 提升C内功--函数栈帧的创建和销毁(动画讲解)
  • Buffer Pool Size of Total RAM No data
  • Python添加水印简简单单,三行代码教你批量添加
  • 【技术性】Search知识
  • 77. Combinations
  • classpath对获取配置文件的影响
  • Hibernate【inverse和cascade属性】知识要点
  • JS 面试题总结
  • 飞驰在Mesos的涡轮引擎上
  • 汉诺塔算法
  • 简单易用的leetcode开发测试工具(npm)
  • 老板让我十分钟上手nx-admin
  • 类orAPI - 收藏集 - 掘金
  • 巧用 TypeScript (一)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 入口文件开始,分析Vue源码实现
  • 使用docker-compose进行多节点部署
  • 我是如何设计 Upload 上传组件的
  • kubernetes资源对象--ingress
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (MATLAB)第五章-矩阵运算
  • (动态规划)5. 最长回文子串 java解决
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (七)Java对象在Hibernate持久化层的状态
  • (七)理解angular中的module和injector,即依赖注入
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .NET 中 GetProcess 相关方法的性能
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net网站发布-允许更新此预编译站点
  • .net下简单快捷的数值高低位切换
  • @PreAuthorize注解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [Bada开发]初步入口函数介绍
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [CF482B]Interesting Array
  • [Java]深入剖析常见排序
  • [LeetCode]Reverse Linked List II
  • [noip2015 d1t2] 信息传递
  • [Oh My C++ Diary]头文件使用之math.h与cmath