Python中, 介绍面向对象及三大特征

面向对象(Object Oriented Programming) OOP, 是一个重要的编程范式, 它主要基于"对象"的概念, 这些对象具有属性(数据)和方法(函数)

三个特征: 封装, 继承,多态

简单来说: 

封装: 隐藏内部实现细节, 只保留功能接口

继承: 类与类之间的关系 (比如说父和子的关系), 只要是实现服用, 父中的属性和方法, 儿子可以用

多态: 一类事物有多种形态(一个类中有多个子类)

具体来说:

封装: 

封装就是将数据(属性)和与其相关联的操作(方法)绑定在一起的过程, 在Python中, 类是实现封装的主要工具, 通过类和定义私有变量和方法, 我们可以隐藏对象的内部状态和实现细节, 只对外暴露必要的接口, 有助于保护数据, 同时使代码更加模块化和可维护。

继承:

允许我们创建一个新的类(称为子类和派生类), 继承另一个类(称为父类和基类) 的属性和方法, 子类乐意继承父类中的所有属性和方法, 并且可以添加或者覆盖自己的属性和方法, 这有助于代码的复用和扩展

class Animal:  def __init__(self, name):  self.name = name  def speak(self):  print(f"{self.name} makes a sound")  class Dog(Animal):  # Dog类继承自Animal类  def speak(self):  print(f"{self.name} barks")  # 覆盖父类的speak方法  dog = Dog("Buddy")  
dog.speak()  # 输出: Buddy barks

多态:

不同的对象对同一消息做出响应, 通常通过方法的重写(override) 和接口(通常通过抽象基类实现), 多态允许使用父类类型的引用指向子类对象, 并执行子类覆盖或实现的方法, 这使得代码更加灵活

from abc import ABC, abstractmethod  class Shape(ABC):  # 抽象基类  @abstractmethod  def area(self):  pass  class Circle(Shape):  def __init__(self, radius):  self.radius = radius  def area(self):  return 3.14 * self.radius ** 2  class Rectangle(Shape):  def __init__(self, width, height):  self.width = width  self.height = height  def area(self):  return self.width * self.height  def calculate_area(shape):  print(shape.area())  # 多态性:无论传入的是Circle还是Rectangle对象,都调用area方法  circle = Circle(5)  
rectangle = Rectangle(4, 6)  calculate_area(circle)  # 输出Circle的面积  
calculate_area(rectangle)  # 输出Rectangle的面积

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

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

相关文章

CTF网络安全大赛详情

网络安全已成为现代社会的一个关键挑战,随着互联网技术的飞速发展,从个人隐私保护到国家安全,网络安全的重要性日益突显。为了应对这一挑战,CTF(Capture The Flag,中文:夺旗赛)应运而…

openEuler-22.03下载、安装

一、下载 下载地址:openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本:openEuler-22.03-LTS-x86_64-dvd.iso 二、安装 配置完后开启虚拟机 设置完后,重启虚拟机 设置桥接模式的网络 cd /etc/sysconfig/network-scripts/ vi if…

LeetCode 2739. 总行驶距离

题目链接https://leetcode.cn/problems/total-distance-traveled/?envTypedaily-question&envId2024-04-25 简单题,看代码思考一下即可理解 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (mainTank >…

RK3568 学习笔记 : u-boot 千兆网络无法 ping 通PC问题的解决

前言 开发板型号: 【正点原子】 的 RK3568 开发板 使用 虚拟机 ubuntu 20.04 收到单独 编译 RK3568 u-boot 【问题】u-boot 千兆网络无法ping 通?Linux 下千兆网络正常,说明:开发板硬件正常 u-boot 下网络如果通了,…

寄存器和变量有什么区别

2024年4月25日,周四晚上 寄存器和变量是计算机编程和计算机硬件中两个不同的概念,它们在内存管理和数据存储方面有着不同的作用和特点。 寄存器: 硬件实现:寄存器是计算机处理器(CPU)内部的一组高速存储单…

【高频】基于GBDT-FM模型的level-2高频数据实证研究(二)

【高频】基于GBDT-FM模型的level-2高频数据实证研究(二) 原创 Yud. 2AMquant 2024-04-04 11:30 广东 上一篇中初步提及了Level2数据中常见变量指标的构建方式,以及其带来的价格冲击。此篇将使用GBDT-LM模型对短程价格走势进行简单预测。 ps…

Nginx下载安装,什么是nginx,什么是反向代理,Windows下、linux下安装nginx(保姆级教程)

文章目录 一、Nginx简介为什么要使用NginxNginx的特点Nginx的相关概念正向代理反向代理动静分离负载均衡 二、Nginx安装1. Windows安装2. Linux安装 一、Nginx简介 Nginx 是一个高性能的 HTTP(静态资源服务器) 和 反向代理 Web 服务器。 为什么要使用N…

JavaScript常问面试题

css 1.HTML5新增了哪些内容 语义化更好的内容标签(header,footer,main,nav,aside,article,section)音频 ,视频标签(audio, video)画布(canvas)表单控件 calendar , date , time , email , url , search , tel , file , number地理位置API(geolocation)拖拽释放API(Drap and d…

AI-数学-高中-44导数的运算法则

原作者视频:【导数】【一数辞典】3导数的运算法则(略难)_哔哩哔哩_bilibili 三种求导表达方式一样的,中间的比较常用: 链式法则:从外向内:

Redis学习(三)| Redis高可用和容错机制详解

文章目录 高可用性主从复制(Master-Slave Replication)哨兵(Sentinel) 容错性数据持久化哨兵(Sentinel) 高可用vs容错性概念关联 结论 Redis(Remote Dictionary Server)是一种高性能…

如何部署Tensorrtx

因为模型跑起来太慢了,所以想要运用tensorrtx进行加速。但是这个是有难度的,且网络上的教程大多写的不是很好。我将以一个新人的视角,从头开始部署基于yolov5的tensorrtx加速。 知识补充:TensorRT和TensorRTX的区别 tensorRT是英…

Leaflet加载geowebcache的WMTS服务

方法1&#xff1a;leaflet.TileLayer.WMTS插件 插件地址https://github.com/alexandre-melard/leaflet.TileLayer.WMTS 用法示例https://hanbo.blog.csdn.net/article/details/80768710 我的示例代码 <!DOCTYPE html> <html lang"zh"> <head><…

【C++】117 填充每个节点的下一个右侧结点指针

给定一个二叉树&#xff1a; struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL 。 初始状态下&#xff0c;所有 next 指…

统一SQL 支持Oracle cast函数转换

统一SQL介绍 https://www.light-pg.com/docs/LTSQL/current/index.html 源和目标 源数据库&#xff1a;Oracle 目标数据库&#xff1a;Postgresql&#xff0c;TDSQL-MySQL&#xff0c;达梦8&#xff0c;LightDB-Oracle 操作目标 在Oracle中&#xff0c;cast函数允许将一种…

yolov8 区域声光报警+计数

yolov8 区域报警计数 1. 基础2. 报警功能2. 1声音报警代码2. 2画面显示报警代码 3. 完整代码4. 源码 1. 基础 本项目是在 yolov8 区域多类别计数 的基础上实现的&#xff0c;具体区域计数原理可见上边文章 2. 报警功能 设置一个区域region_points&#xff0c;当行人这一类别…

XiaodiSec day028 Learn Note 小迪安全学习笔记

XiaodiSec day028 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 day 28 还是 sql 注入 知识点 提交方式的注入 在 php, spring boot, flask 都有相关的提交方式 提交方式的注入 数据以某种方式提交到后端 数据大小和数据类型和提交方式有关 如身份…

链栈的基本操作(c语言实现)

栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 栈的结构 定义栈…

【JAVA】503.下一个更大元素II | 42. 接雨水 | 84.柱状图中最大的矩形

class Solution {public int[] nextGreaterElements(int[] nums) {int len nums.length;int[] res new int[len];Deque<Integer> stack new LinkedList<>();Arrays.fill(res,-1);for(int i 0 ;i<len*2; i){//循环数用取模的方式int j i % len;while(!stack…

JVM虚拟机监控及性能调优实战

目录 jvisualvm介绍 1. jvisualvm是JDK自带的可以远程监控内存&#xff0c;跟踪垃圾回收&#xff0c;执行时内存&#xff0c;CPU/线程分析&#xff0c;生成堆快照等的工具。 2. jvisualvm是从JDK1.6开始被继承到JDK中的。jvisualvm使用 jvisualvm监控远程服务器 开启远程监控…

C#参数修饰符params

C#参数修饰符params params 关键字允许在 C# 中指定一个方法参数&#xff0c;该参数接受可变数量的参数。这意味着你可以传递一个由指定类型的参数组成的逗号分隔的列表&#xff0c;编译器会将它们打包成一个数组。 示例 : using System;class Program {static void Main(st…