iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python学习笔记:第17天 面向对象
  • 406
分享到

python学习笔记:第17天 面向对象

面向对象学习笔记python 2023-01-30 22:01:17 406人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在以下关系: 依赖关系 关联关系

一、类与类之间的依赖关系

⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类
中存在以下关系:

  1. 依赖关系
  2. 关联关系
  3. 组合关系
  4. 聚合关系
  5. 继承关系
  6. 实现关系

依赖关系

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。表现在代码层面,类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。注意,要避免双向依赖。一般来说,不应该存在双向依赖。

class Person:
    def eat(self, food):
        print(f'我要吃{food.name}')
    
    def read(self, book):
        print(f'我在看{book.book_name}')
        

class Food:
    def __init__(self, name):
        self.name = name
        
class Book:
    def __init__(self, book_name):
        self.book_name = book_name

apple = Food('苹果')
book = Book('红楼梦')
p = Person()
p.eat(apple)            # apple对象以方法参数的形式传入到p对象中使用
p.read(book)            # 可以说是Person类是依赖于Food类和Book类

# 执行结果:
# 我要吃苹果
# 我在看红楼梦

关联关系.组合关系, 聚合关系

其实这三个在代码上写法是⼀样的. 但是, 从含义上是不⼀样的.

  1. 关联关系. 两种事物必须是互相关联的. 但是在某些特殊情况下是可以更改和更换的.

  2. 聚合关系. 属于关联关系中的⼀种特例. 侧重点是xxx和xxx聚合成xxx. 各⾃有各⾃的声明周期. 比如电脑. 电脑⾥有CPU, 硬盘, 内存等等. 电脑挂了. CPU还是好的. 还是完整的个体

  3. 组合关系. 属于关联关系中的⼀种特例. 写法上差不多. 组合关系比聚合还要紧密. 比如⼈的⼤脑, ⼼脏, 各个器官. 这些器官组合成⼀个⼈. 这时. ⼈如果挂了. 其他的东⻄也跟着挂了.

我们来看一个例子:

class Boy:
    def __init__(self, name, grilFriend):
        self.name = name
        self.grilFriend = grilFriend            # grilFriend参数以变量的形式存储在Boy类中,这就形成了关联关系
        
    def sendGift(self):
        print(f'送给女朋友{self.grilFriend.name}一个礼物')
        
class Girl:
    def __init__(self, name):
            self.name = name

        
girl = Girl('小麻烦')
boy = Boy('马脸', girl)                         # 此时在Boy对象初始化时把Girl对象当作传参数出入类中
boy.sendGift()

# 运行结果:
# 送给女朋友小麻烦一个礼物

上面例子就是一个关联关系,一般男女朋友都是固定的,不可能经常更换;Girl对象作为Boy的变量存在与Boy类中,如果缺失这个属性,Boy类可能无法正常工作。其实这样的关系在生活中还有很多,比如说学生和老师:

# 老师和学生的关系,一对多的关系  反过来就是一对一

class Tearcher:
    def __init__(self, name, stuList=None):
        self.name = name
        if stuList:
            self.stuList = stuList
        else:
            self.stuList = []
            
    def addStudent(self, student):
        self.stuList.append(student)
        
    def showStudent(self):
        for stu in self.stuList:
            print(stu.id, stu.name, stu.teacher)
            
class Student:
    def __init__(self, sid, name, teacher=None):
        self.id = sid
        self.name = name
        if teacher:
            self.teacher = teacher.name
        else:
            self.teacher = None
            
t = Tearcher('大张伟')
s1 = Student(1, '郭德纲')
s2 = Student(2, '小沈阳', t)
s3 = Student(3, '宋小宝')
s4 = Student(4, '岳云鹏', t)

t.addStudent(s1)
t.addStudent(s2)
t.addStudent(s3)
t.addStudent(s4)

t.showStudent()

# 运行结果:
# 1 郭德纲 None
# 2 小沈阳 大张伟
# 3 宋小宝 None
# 4 岳云鹏 大张伟

一个老师可以有多个学生,这就是一对多的关系了;如果反过来,一个学生只有一个老师,那就是一对一的关系,好了. 这就是关联关系。当我们在逻辑上出现了:我需要你,你还得属于我,这种逻辑就是关联关系,那注意这种关系的紧密程度比上⾯的依赖关系要紧密的多

  • 组合关系和聚合关系. 其实代码上的差别不⼤. 都是把另⼀个类的对象作为这个类的属性来传递和保存. 只是在含义上会有些许的不同⽽已
  • 继承关系和实现关系的内容后期再学习到继承的时候再补上

二、类中的特殊成员

什么是特殊成员呢?__init_()就是⼀个特殊的成员. 说⽩了. 带双下划线的那⼀坨. 这些⽅
法在特殊的场景的时候会被⾃动的执⾏。比如:

__init__()              # 使用 class_name() 会自动执行初始化函数__init__()
__call__()              # 使用 instance() 会自动执行__call__()
__getitem__()           # 执行 instance[key] 时会⾃动触发
__setitem__()           # 执⾏ instance[key] = value 时会⾃动触发
__delitem__()           # 执⾏del instance[key] 时会⾃动触发
__add__()               # 当执行 instance1 + instance2 时会自动触发
__enter__()             # 当执行with instance 时会触发,先执行__enter__函数
__exit__()              # 执行完with语句退出时执行(with open ...)
__str__()               # 打印一个对象时返回的时对象的__str__方法
__repr__()              # 与repr差不多,返回的格式更为正式(比较偏底层,接近解释器)
__hash__ = None         # 设置对象为不可hash
__hash__()              # 自己定制hash计算方法
__len__()               # len()调用的就是__len__
__gt__()                # 大于或等于
__ge__()                # 大于
__lt__()                # 小于或等于
__le__()                # 小于
__eq__()                # 等于

--结束END--

本文标题: python学习笔记:第17天 面向对象

本文链接: https://www.lsjlt.com/news/180167.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python学习笔记:第17天 面向对象
    一、类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在以下关系: 依赖关系 关联关系...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • python学习笔记:第16天 面向对象
    目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • 学习python的第十八天(面向对象编程
    一.面向对象编程 ​ 面向过程编程,核心是编程二字,过程指的是解决问题的步骤,即先干什么、后干什么、再干什么、然后干什么…… 与工厂的工艺流程差不多,前后都有影响 优点:复杂的问题流程化,进而简单化,调理清晰. 缺点:拓展性不行 二.对...
    99+
    2023-01-31
    面向对象 python
  • Python学习笔记:第一天python
    目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据...
    99+
    2023-01-30
    学习笔记 Python python
  • Python学习笔记:第2天while循
    目录 1. while循环 continue、break和else语句 2. 格式化输出 3. 运算符 ...
    99+
    2023-01-30
    学习笔记 Python
  • PHP学习笔记:面向对象编程基础
    导言:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介...
    99+
    2023-10-21
    PHP 基础 面向对象编程(OOP)
  • Python - 面向对象学习
    本节内容: 面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是...
    99+
    2023-01-31
    面向对象 Python
  • Java学习笔记之面向对象编程精解
    目录包继承super 关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态 、抽象类、接口) 包 包其实就是类的集合,其本质上其实就是一个文件...
    99+
    2024-04-02
  • python学习笔记:第7天 深浅拷贝
    目录 1. 基础数据类型补充 2. set集合 3. 深浅拷贝 1. 基础数据类型补充 (1)join方法 join方法是...
    99+
    2023-01-30
    深浅 学习笔记 python
  • python3第八天(面向对象)
    面向对象技术简介:    类(Class):用来描述具有相同属性的方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.    类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中,具在函数体之外.类变量通常...
    99+
    2023-01-31
    面向对象 第八天
  • python学习笔记:第19天 类的约束
    目录 一、类的约束 二、异常处理: 三、MD5加密 四、日志(logging模块) 一、类的约束 真正写写...
    99+
    2023-01-30
    学习笔记 python
  • python_面向对象笔记
    继承 什么是继承? 继承是一种新建类的方式,新建的类称为子类或派生类父类又称为基类、超类子类可以“遗传”父类的属性,从而可以减少代码冗余如何寻找继承关系?先抽象,再继承,继承描述的就是一种父子关系 / 从属关系继承的语法class Fo...
    99+
    2023-01-30
    面向对象 笔记
  • python学习笔记:第6天 小数据池和
    目录 1. id 和 == 2. 小数据池 3. 编码和解码 1. id 和 == id:id是一个内置的函数,可以查...
    99+
    2023-01-30
    学习笔记 数据 python
  • python学习32(面向对象_3)
    继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。即一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生...
    99+
    2023-01-31
    面向对象 python
  • Python学习 :面向对象 -- 三大
    面向对象的三大特性 一、封装 把数据、值、变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1、创建对象 2、通过对象执行类中的一个特殊方法(_init_方法) ...
    99+
    2023-01-30
    三大 面向对象 Python
  • 第一周Python学习笔记
     Python 基本语法: ①  Python程序的格式:1.用代码高亮来标识函数丶语句等等 本身的代码高亮并没有实际的意义,只是用来辅助编程人员和阅读人员 更好的识别    2.程序以缩进来标识语句,缩进用来标识代码间的层次关系,缩进的...
    99+
    2023-01-30
    学习笔记 第一周 Python
  • Python学习笔记5——一切皆对象
    我发现我不适合看视频学习,看书看文字觉得更舒服,看大神的博客教程:Python快速教程——这是大神的第一篇博客,点击下一篇,一篇篇看下去,都很通俗易懂,坐看看大神是如何成长的,可以利用碎片时间看,收获很多,不再迷茫。 另外,下面的评论也很...
    99+
    2023-01-30
    学习笔记 一切皆 对象
  • Python第八周 学习笔记(1)
    基本概念个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性 子类继承了父类,就直接拥有了父类的属性和方法,也可以定义自己的属性、方法,甚至对父类的属性、方法进行重写 Python继承实现 class Cat(Anima...
    99+
    2023-01-31
    学习笔记 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作