Python基础(二十四):面向对象核心知识

news/2024/9/18 6:28:11/

文章目录

面向对象核心知识

一、面向对象三大特性

1、封装

2、继承

3、多态

二、多态

1、了解多态

2、体验多态

三、类属性和实例属性 

1、类属性

2、实例属性

四、类方法和静态方法

1、类方法

2、静态方法


面向对象核心知识

一、面向对象三大特性

1、封装

  • 将属性和方法书写到类的里面的操作即为封装
  • 封装可以为属性和方法添加私有权限

2、继承

  • 子类默认继承父类的所有属性和方法
  • 子类可以重写父类属性和方法

3、多态

  • 传入不同的对象,产生不同的结果

二、多态

1、了解多态

多态指的是⼀类事物有多种形态,(⼀个抽象类有多个子类,因而多态的概念依赖于继承)。

定义:多态是⼀种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以
产生不同的执行结果
好处:调用灵活,有了多态,更容易编写出通用的代码,做出通用的编程,以适应需求的不断变
化!
实现步骤:
  • 定义父类,并提供公共方法
  • 定义子类,并重写父类方法
  • 传递子类对象给调用者,可以看到不同子类执行效果不同

2、体验多态

class Dog(object):def work(self): # ⽗类提供统⼀的⽅法,哪怕是空⽅法print('指哪打哪...')class ArmyDog(Dog):  # 继承Dog类def work(self):  # ⼦类重写⽗类同名⽅法print('追击敌⼈...')class DrugDog(Dog):def work(self):print('追查毒品...')class Person(object):def work_with_dog(self, dog):  # 传⼊不同的对象,执⾏不同的代码,即不同的work函数dog.work()ad = ArmyDog()
dd = DrugDog()
daqiu = Person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)

三、类属性和实例属性 

1、类属性

设置和访问类属性
  • 类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
  • 类属性可以使用类对象 实例对象访问。
class Dog(object):tooth = 10wangcai = Dog()
xiaohei = Dog()
print(Dog.tooth) # 10
print(wangcai.tooth) # 10
print(xiaohei.tooth) # 10

类属性的优点
  • 记录的某项数据 始终保持⼀致时,则定义类属性。
  • 实例属性 要求 每个对象 为其 单独开辟⼀份内存空间 来记录数据,而类属性 为全类所共有 ,仅占⽤⼀份内存更加节省内存空间

修改类属性

类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了⼀个实例属性。
class Dog(object):tooth = 10
wangcai = Dog()
xiaohei = Dog()
# 修改类属性
Dog.tooth = 12
print(Dog.tooth) # 12
print(wangcai.tooth) # 12
print(xiaohei.tooth) # 12
# 不能通过对象修改属性,如果这样操作,实则是创建了⼀个实例属性
wangcai.tooth = 20
print(Dog.tooth) # 12
print(wangcai.tooth) # 20
print(xiaohei.tooth) # 12

2、实例属性

class Dog(object):def __init__(self):self.age = 5def info_print(self):print(self.age)
wangcai = Dog()
print(wangcai.age) # 5
# print(Dog.age) # 报错:实例属性不能通过类访问
wangcai.info_print() # 5

四、类方法和静态方法

1、类方法

类方法特点
  • 需要用装饰器 @classmethod 来标识其为类方法,对于类方法,第⼀个参数必须是类对象,⼀般以cls 作为第⼀个参数。

类方法使用场景

  • 当方法中 需要使用类对象 (如访问私有类属性等)时,定义类方法
  • 类方法⼀般和类属性配合使用
class Dog(object):__tooth = 10@classmethoddef get_tooth(cls):return cls.__toothwangcai = Dog()
result = wangcai.get_tooth()
print(result) # 10

2、静态方法

静态方法特点
  • 需要通过装饰器 @staticmethod 来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象 (形参没有self/cls
  • 静态方法 也能够通过 实例对象 类对象 去访问。

静态方法使用场景
  • 当方法中 既不需要使用实例对象(如实例对象,实例属性)也不需要使用类对象 (如类属性、类方法、创建实例等)时,定义静态方法
  • 取消不需要的参数传递,有利于 减少不必要的内存占用和性能消耗
class Dog(object):@staticmethoddef info_print():print('这是⼀个狗类,⽤于创建狗实例....')
wangcai = Dog()
# 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
wangcai.info_print()
Dog.info_print()


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨ 

http://www.ppmy.cn/news/12715.html

相关文章

Java中的包装类

基本数据类型的豪华版---包装类基本数据类型包装类基本数据类型 在我们刚开始学习Java的时候,我们学习的应该就是Java中的八种基本数据类型: byte short int long float double char boolean 当时我们还说过Java是面向对象编程的语言,一切皆对象,但是受到当时知识的限制,我们还…

校招求职HR常问问题汇总

前言 前言:面试是一次重要的自我销售的过程,只不过销售的产品是你自己,你要做的就是说服面试官认为你是优秀的,从而给你一个工作机会。 文章目录前言一、回答问题的原则二、自我介绍1、注意2、模板3、达到的效果三、你还有什么问题…

卷积神经网络中特征图大小计算公式总结

W:输入特征图的宽,H:输入特征图的高K:kernel size卷积核宽和高,P:padding(特征图需要填充的0的个数),S:stride步长width_out:卷积后输出特征图的宽…

回首2022展望2023

回首2022,虽然经历反复的居家办公,但仍然努力客服家庭与工作的时间冲突,很好的完成了开发任务。并在疫情变换间隙,带着部门同事做了几次团建,锻炼了队伍,提高了凝聚力。我同时坚信迟早会全面放开。在闲暇之…

Go语言运算符

Go语言运算符 参考资料主要来源于菜鸟教程。 运算符用在程序运行时执行数学逻辑运算。 Go语言内置的运算符有: 算术运算符关系运算符逻辑运算符位运算符赋值运算符其它运算符 算术运算符 下表列出所有Go语言的算术运算符。假定A值为10,B值20。 运算符…

理解CSS

CSS 作为前端技术栈中关键一环,对页面元素及样式呈现起到了直接作用。本节课旨在通过对 CSS 的工作流程及原理、页面中 CSS 使用方法等详细解读,帮助前端新手建立对 CSS 的全面而深刻的认知。 CSS概念 CSS 即 Cascading Style Sheets,是用来…

[idekCTF 2023] Malbolge I Gluttony,Typop,Cleithrophobia,Megalophobia

这些题名字我都不认识,这是什么语呀。这个比赛感觉太难了,加上春节将近比较忙,仅作了4个简单题。记录一下。Misc/Malbolge I Gluttony这是个虚拟机的题,放入misc感觉有点不可思忆,题目给了7个命令,有"…

【初阶数据结构】——写了将近 5 万字,终于把 二叉树 初阶的内容讲清楚了

文章目录前言1. 树的概念及结构1.1 树的概念1.2 树与非树1.3 树的相关概念1.4 树的表示1.5 树在实际中的运用(表示文件系统的目录树结构)2. 二叉树概念及结构2.1 概念2.2 现实中的二叉树2.3 特殊的二叉树2.3.1 满二叉树2.3.1 完全二叉树2.4 二叉树的性质…

计讯物联数字乡村解决方案赋能乡村振兴

项目背景 数字乡村是乡村振兴的战略方向,是推动农村现代化的重要途径。当前,数字乡村建设正在加速推进,打造乡村数字治理新模式,提升乡村的数字化水平,进一步推动乡村振兴进入高质量发展新赛道。计讯物联作为数字乡村…

3.Python基础之流程控制

文章目录Python基础之流程控制顺序结构分支(选择)结构单项分支双项分支多项分支巢状分支循环结构whilefor ... in(字典的特殊使用)[https://blog.csdn.net/yaoyuanna/article/details/126009259]流程控制语句breakcontinuepassPython基础之流程控制 流程分类: 流程…

SpringBoot 注册自己的Servlet(三种方式)

SpringBoot 注册自己的Servlet(三种方式) 目录SpringBoot 注册自己的Servlet(三种方式)方法1:使用servlet3.0规范提供的注解方式注册Servlet1,声明servlet及映射2,加上ServletComponentScan 才会扫描加了这个注解运行结…

HTTP/HTTPS协议介绍

数据来源 HTTP简介 01 什么是HTTP 超文本传输协议(HyperTextTransferProtocol缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTP( Hyper Text Transfer Protocol超京本传输协议) 是一个基于请求与响应 无状态的,应…

《Stealth秘密行动》游戏开发记录

游戏开发的学习记录项目:Stealth秘密行动开始时间:2022.12.30一、新学到的:二、遇到的问题:三、成品部分展示:游戏开发的学习记录⑧ 项目:Stealth秘密行动 开始时间:2022.12.30 (…

【ESP 保姆级教程】玩转emqx篇 ——初识emqx

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2022-01-15 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…

AtCoder Beginner Contest 285解题报告

A - Edge Checker 2 Problem Statement Determine if there is a segment that directly connects the points numbered a and b in the figure below. Constraints 1≤a<b≤15a and b are integers.Input The input is given from Standard Input in the following for…

详解数据库的锁机制及原理

详解数据库的锁机制及原理1.数据库锁的分类2.行锁共享锁&#xff08;读锁S锁&#xff09;排他锁&#xff08;写锁X锁&#xff09;更新锁3.意向锁&#xff08;IX/IS锁&#xff09;4.锁机制解释数据库隔离级别5.间隙锁1.数据库锁的分类 本图源自CSDN博主&#xff1a;Stephen.W 数…

LeetCode刷题模版:111 - 120

目录 简介111. 二叉树的最小深度112. 路径总和113. 路径总和 II114. 二叉树展开为链表115. 不同的子序列116. 填充每个节点的下一个右侧节点指针117. 填充每个节点的下一个右侧节点指针 II118. 杨辉三角119. 杨辉三角 II120. 三角形最小路径和结语简介 Hello! 非常感谢您阅读海…

Go语言并发编程及依赖管理

目录&#x1f9e1;并发编程GoroutineCSP(Communicating Sequential Processes)&#x1f9e1;依赖管理依赖演变依赖管理三要素&#x1f49f;这里是CS大白话专场&#xff0c;让枯燥的学习变得有趣&#xff01; &#x1f49f;没有对象不要怕&#xff0c;我们new一个出来&#xff0…

Http客户端 Feign 的使用 (黑马springcloud笔记)

Feign基本使用 目录Feign基本使用一、Feign代替RestTemplate二、自定义配置三、Feign使用优化1. 底层优化2. 日志优化四、最佳实践方式一&#xff1a;继承方式二&#xff1a;抽取一、Feign代替RestTemplate 步骤&#xff1a; 引入依赖 <dependency><groupId>org.s…

RT-Thread系列--组件初始化

一、目的RT-Thread里面有个特别有意思的软件设计叫做组件自动初始化。有些小伙伴可能是第一次听说&#xff0c;所以这边我解释一下&#xff0c;请看下面的代码片段static void clock_init() {// 时钟初始化 } static void uart_init() {// 串口初始化 } static void i2c_init()…