十一、面向对象进阶

news2025/4/8 9:31:29

文章目录

  • 学习目标
  • 一、类方法和静态方法
  • 二、单例模式
  • 三、Python的继承
    • 3.1 继承的基本使用
    • 3.2 Python继承的特点
    • 3.3 私有属性的继承特点
    • 3.4 新式类和经典类
  • 四、对象相关的运算符和内置函数
  • 五、多态的使用
    • 5.1 子类重写父类的方法
    • 5.2 多态的使用

学习目标

  • 说出类方法和实例方法的区别和使用场景
  • 能够实现单例设计模式
  • 继承的基本使用以及注意事项
  • 对象相关内置函数的使用
  • 能够说出什么是多态

一、类方法和静态方法

https://zhuanlan.zhihu.com/p/93178202 ---- 基础入门必看篇:Python静态方法个类方法实例分析

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def eat(self, food):
        print(self.name + "在吃"+food)
    
    # 如果一个方法里没有用到是对象的任何属性,可以将这个方法定义成static
    @staticmethod
    def demo():
        print('hello')

    @classmethod
    def test(cls): # 如果这个函数只用到了类属性,我们可以定义一个类方法
        # 类方法会有一个参数cls,也不需要手动的传参,会自动传参
        # cls指的是类对象 (Person)
        print('yes')

p = Person('张三', 18)

# eat() 是对象方法,可以直接使用 实例对象.方法(参数) 调用,不需要传递self。会自动将对象传递给self
p.eat('红烧牛肉面') # 直接使用实例对象调用方法

# 对象方法还可以使用类对象来调用 类名.方法名()
# 这种方式,不会自动给 self 传参,需要手动的指定 self
Person.eat(p1,'红烧牛肉面')

# 静态方法调用:没有用到实例对象的任何属性
# 1. 类调用
Person.demo()
# 2. 实例调用
p1.demo()

# 类方法:可以使用实例对象和类对象调用,均不需要传cls,会自动将对象所属的类对象传递给cls
p1.demo()
Person.demo()

  • 静态方法、类方法、实例方法(对于所有的方法而言,在内存空间中均属于类,所以 在内存中也只保存一份。方法调用者不同、调用方法时自动传入的参数不同)
    在这里插入图片描述

在这里插入图片描述

二、单例模式

class Singleton(object):
    __instance = None # 保证全局唯一
    __is_first = True # 设置仅能初始化参数一次

    @staticmethod
    def __new__(cls, *args, **kwargs):
        # 申请内存,创建一个对象,并把对象的类型设置为cls
        if cls.__instance is None
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, a, b):
        if self.__is_first:
            self.a = a
            self.b = b
            self.__is_first = False # 动态设置实例属性

# 调用 __new__ 方法申请内存
# 如果不重写 __new__ 方法,会调用 object 的 __new__ 方法
# object 的 __new__ 方法会申请内存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1937112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring中的IOC详解

文章目录 IOCIOC容器的工作原理Bean的生命周期Bean的自动装配AutowiredResourceInject 使用Spring底层组件 IOC Spring的核心之一是IOC,IOC全称为Inversion of Control,中文译为控制反转,是面向对象编程中的一种设计原则,可以用来…

栈和队列(一) ------基本概念,循环队列

目录 栈 python实现 队列 python实现 循环队列 力扣622- --循环队列 力扣20 ----有效括号判断 分析 代码 栈 python实现 在Python中实现一个栈(Stack)可以通过使用列表(list)来完成,因为列表提供了动态数…

【网络安全的神秘世界】Error:Archives directory /var/cache/apt/archives/partial is missing.

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨问题描述 在kali中想要安装beef-xss软件包时,发生如下报错: Error: Archives directory /var/cac…

d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法

d3d12.dll 文件缺失如何解决?它为什么会不见呢?今天,我们将探讨 d3d12.dll 文件的重要性、原因以及丢失时的解决策略。本文将全面介绍 d3d12.dll 文件,并提供五种修复丢失问题的方法。 d3d12.dll文件是什么的详细介绍 d3d12.dll …

【RAGFlow】Ubuntu系统下实现源码启动RAGFlow

一、RAGFlow 是什么? RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用…

【C语言初阶】C语言数组基础:从定义到遍历的全面指南

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言函数 🌹🌹期待您的关注 🌹🌹 ❀数组 📒1. 什么是数组…

【医学影像】X86+FPGA:支持AI医学影像设备应用的工控主板,赋能CT、MRI、X线、超声等医学影像设备

支持AI医学影像设备应用的工控主板 在我国人口老龄化问题不断加剧,对影像诊断需求持续增长,和国家利好高端医学影像市场发展的系列法规和政策接连出台的大环境下,AI医学影像设备产业迎来发展黄金期。紧跟发展大势,基于12/13代 In…

天途无人机林业应用解决方案

林业应用现状分析 森林环境较为复杂,人员无法快速到达现场,工作人员通常会面临监控盲区,林区爬山涉水困难多;森林防火重要性不可忽视,2019年全国共发生森林火灾2345起,森林防火仍为重中之重;环…

SAPUI5基础知识16 - 深入理解MVC架构

1. 背景 经过一系列的练习,相信大家对于SAPUI5的应用程序已经有了直观的认识,我们在练习中介绍了视图、控制器、模型的概念和用法。在本篇博客中,让我们回顾总结下这些知识点,更深入地理解SAPUI5的MVC架构。 首先,让…

Jvm基础(一)

目录 JVM是什么运行时数据区域线程私有1.程序计数器2.虚拟机栈3.本地方法栈 线程共享1.方法区2.堆 二、对象创建1.给对象分配空间(1)指针碰撞(2)空闲列表 2.对象的内存布局对象的组成Mark Word类型指针实例数据:对齐填充 对象的访问定位句柄法 三、垃圾收集器和内存…

React基础学习-Day04

React基础学习-Day04 常见的钩子函数及基础使用方式 1.useState useState 是 React 的一个 Hook,用于在函数组件中添加状态。它返回一个状态变量和一个更新该状态的函数。与类组件的 this.state 和 this.setState 相对应,useState 让函数组件也能拥有…

【第10章】Spring Cloud之Nacos动态配置

文章目录 前言一、上下文1. 新增配置2. 启动类3. 效果 二、注解 ( 推荐 ) \color{#00FF00}{(推荐)} (推荐)1. 获取配置2. 测试2.1 未配置2.2 配置值2.3 修改值 总结 前言 这一章我们通过两个案例来学习Nacos动态配置,通过在控制台修改服务端配置文件值,…

linux环境交叉编译openssl库,以使Qt支持https

一.前言 Qt若需要支持https,则需要openssl的支撑,并且要注意,Qt不同版本会指定对应的openssl版本库,比方我用的Qt5.15.10他要求用的openssl版本是1.1.1,你就不能用其他版本,不然基本就是失败报错。 如何查看Qt对应ope…

TK秘籍:深度剖析机房IP与住宅IP的利与弊

大家好,今天我们来聊聊TikTok运营中的一个重要环节——IP地址的选择。 想象一下,你在TikTok上发布视频,就像是在一个热闹的市集上摆摊,而IP地址就是你的摊位位置。选对了位置,你的摊位就能吸引更多顾客,也…

浪漫情怀:红酒中的诗意与情感

在生活的点滴细节中,总有些元素能触动我们内心较柔软的地方,唤起那份深深的浪漫情怀。而红酒,便是这其中的一种神奇媒介。它以其不同的色泽、香气和口感,让人沉醉其中,感受那份诗意与情感的交织。今天,就让…

使用Kotlin Flow和协程开发高性能Android应用

使用Kotlin Flow和协程开发高性能Android应用:以电影业务为例 引言 在当今移动互联网快速发展的时代,用户对应用的性能和响应速度有了更高的要求。作为开发者,我们需要不断探索和采用新的技术来提升应用的性能和用户体验。Kotlin作为Android开发的首选语言,其协程和Flow特…

抖音/腾讯/百度ocpm深度回传如何操作?广告投放双出价的投放技巧?

要实现抖音、腾讯和百度的OCPM(Optimized Cost Per Mille)深度回传,可以通过借助第三方平台,例如(转化宝)实现广告数据精准回传,如此之外,在广告投放过程中还需要注重这些方面。 转化…

Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】

PythonDjangoMySQL的新闻发布管理系统【附源码,运行简单】 总览 1、《新闻发布管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 新闻新增界面2.4 文章编辑界面2.5 新闻详情页2.7 其他功能贴图 3、下载 总览 自己做的项目&…

云计算实训06——find、stat、touch、tree、scp、crontab指令相关应用

一、find命令 1.find的作用:对文件进行搜索 2. 基本语法: find [文件路径] [选项 选项的值 ] 3.常见的选项 -name 根据文件的名称搜索文件,支持通配符 * -type f 代表普通文件,-type d 代表目录 4.* 通配符 在 linux 系统…