Python 无废话-基础知识面向对象编程详解
类定义
如何理解万物皆对象?
生活中一些事物,动物(可爱的小狗、调皮的小猫)、交通工具(比亚迪U8汽车、飞机)、人(学生、教师)……
这些对象都有着独特或共性的属性和方法来描述其特征和行为。

类定义
将上述图片可以分类,动物类、交通工具类、人类……
类是一种用来创建对象的蓝图或模板,定义了对象的属性和方法,并通过实例化来创建具体的对象
作用:使代码更加模块化、可维护和可扩展
通过定义类,则可以创建多个具有相同属性和方法的对象,这些对象被称为类的实例。例如,定义一个名为“Person”的类,然后创建多个不同的人的实例,如学生、教师、校长、主任……
定义类的语法结构
class ClassName:
# 类属性
name=“test”
# 初始化方法
def __init__(self, parameters):
# 类方法
def method_name(self, parameters):
语法解析
3)在类体中,可以定义类的属性和方法。
4)类属性是属于类本身的属性,可以被所有该类的实例共享。
类体中的 __init__() 方法是一个特殊的方法,也被称为构造方法或初始化方法,它在创建对象时被自动调用, self 参数代表当前对象本身,用于引用对象的属性和方法。其他参数用于接受传递给初始化方法的值
类定义示例
示例定义一个人类,当然也可以定义动物类、交通工具类……
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print("Hello, my name is", self.name)
print("I am", self.age, "years old.")
# 创建一个Person类的实例,李小龙是人类的一个对象,还可以创建张三、李四……
person = Person(“李小龙", 80)
# 访问实例的属性
print(person.name) # 输出:李小龙
print(person.age) # 输出:80
# 调用实例的方法
person.say_hello()
# 输出:Hello, my name is李小龙
# I am 80 years old.
以订单管理系统为例,创建一个名为“Order”的类,订单对象具有订单号、客户姓名和订单金额等属性,同时具有处理支付、生成发票和发送确认邮件等方法,示例如下:
class Order:
def __init__(self, order_id, customer_name, total_amount):
self.order_id = order_id
self.customer_name = customer_name
self.total_amount = total_amount
def process_payment(self):
print(f"正在处理订单 {self.order_id} 的支付,付款金额为 {self.total_amount}")
# 具体的支付逻辑
def generate_invoice(self):
print(f"正在生成订单 {self.order_id} 的发票")
# 具体的发票生成逻辑
def send_confirmation_email(self):
print(f"正在向客户 {self.customer_name} 发送订单 {self.order_id} 的确认邮件")
# 具体的邮件发送逻辑
创建对象
创建对象也称为类的实例化。
#创建对象
my_order = Order("20231006", "李四", 10000)
#调用处理订单方法
my_order.process_payment()
#生成订单方法
my_order.generate_invoice()
#发送邮件
my_order.send_confirmation_email()

类的属性值修改
修改类属性的值,有以下几种方法
- 直接通过类名访问和修改属性
class classTest:
attribute = "old value"
classTest.attribute = "new value"
- 2. 通过类的实例访问和修改属性
class classTest:
def __init__(self):
self.attribute = "old value"
obj = classTest()
obj.attribute = "new value "
3. 通过类的方法访问和修改属性
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"My name is {self.name} and I am {self.age} years old.")
def change_name(self, new_name):
self.name = new_name
def change_age(self, new_age):
self.age = new_age
# 创建一个Person对象
person = Person("李四", 18)
# 打印初始属性值
person.introduce()
# 使用类的方法修改属性值
person.change_name(“李小龙")
person.change_age(80)
# 打印修改后的属性值
person.introduce()

类的继承
类继承是面向对象编程的重要特征之一,一个类可以继承另一个类的属性和方法,并且可以在其基础上进行扩展和修改。
我们把继承看作成是子类继承父类,如果一个子类继承了父类,那么该子类就拥有了父类的属性和方法。
比如人类,有2只手,2只腿,一双眼,会说话,会走路,学生类继承人类,那学生类的实例对象就拥有了这些属性和方法。
单继承
一个类只能继承自一个父类。在定义类时,可以在类名后面使用括号指定继承的父类
class ParentClass:
pass
class ChildClass(ParentClass):
pass
多继承
一个类可以同时继承多个父类。在定义类时,可以在括号中使用逗号分隔多个父类。
class ParentClass1:
pass
class ParentClass2:
pass
class ChildClass(ParentClass1, ParentClass2):
pass

继承示例

类的多态
可以使用多态来重写父类的方法。它允许子类对继承自父类的方法进行重写,并根据不同的子类对象执行不同的行为。
怎样实现多态?
要实现多态,首先需要创建一个父类,定义一个或多个方法。在子类中重写这些方法,以实现自定义的行为。子类可以根据需要修改方法的输入参数、输出结果或内部实现逻辑。
class Animal:
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
print("小狗是汪汪汪!")
class Cat(Animal):
def make_sound(self):
print("小猫是喵喵喵!")
class Cow(Animal):
def make_sound(self):
print("老黄牛是哞哞哞!")
# 创建对象并调用方法
animals = [Dog(), Cat(), Cow()]
for animal in animals:
animal.make_sound()

类的方法重载
可以使用多态来重写父类的方法。它允许子类对继承自父类的方法进行重写,并根据不同的子类对象执行不同的行为。
怎样实现多态?
要实现多态,首先需要创建一个父类,定义一个或多个方法。在子类中重写这些方法,以实现自定义的行为。子类可以根据需要修改方法的输入参数、输出结果或内部实现逻辑。
注意:python 不直接支持方法重载,如果要实现重载需要借助默认参数来实现。
class Calculator:
def add(self, a, b=None, c=None):
if c is not None:
return a + b + c
elif b is not None:
return a + b
else:
return a
# 创建对象并调用方法
calculator = Calculator()
result1 = calculator.add(2)
print(result1) # 输出: 2
result2 = calculator.add(2, 3)
print(result2) # 输出: 5
result3 = calculator.add(2, 3, 4)
print(result3) # 输出: 9
导入单类
Order.py 文件 包含Order类
class Order:
def __init__(self, order_id, customer_name, total_amount):
self.order_id = order_id
self.customer_name = customer_name
self.total_amount = total_amount
def process_payment(self):
print(f"正在处理订单 {self.order_id} 的支付,付款金额为 {self.total_amount}")
# 具体的支付逻辑
def generate_invoice(self):
print(f"正在生成订单 {self.order_id} 的发票")
# 具体的发票生成逻辑
def send_confirmation_email(self):
print(f"正在向客户 {self.customer_name} 发送订单 {self.order_id} 的确认邮件")
# 具体的邮件发送逻辑
Customer.py 文件
#import语句让Python 打开模块Order并导入中其中的Order类
from Order import Order
order=Order("T20231006002","李小龙",10000)
order.process_payment()

导入多个类
Customer.py 文件
#import语句让Python 打开模块Order并导入中其中的Order类, OnlineOrder类
from Order import Order ,OnlineOrder
order=Order("T20231006002","李小龙",10000)
order.process_payment()
ol=OnlineOrder("20231006003", "李四", 10000, "广州", "2023-10-06")
ol.process_payment()

导入整个模块
Customer.py 文件
#import语句让Python 打开模块Order并导入所有模块
import Order
使用别名
#import语句让Python 打开模块Order并导入所有模块,别为or
import Order as or
使用示例
cus=or.OnlineOrder("20231006003", "李四", 10000, "广州", "2023-10-06")
相关文章:
Python 无废话-基础知识面向对象编程详解
类定义 如何理解万物皆对象? 生活中一些事物,动物(可爱的小狗、调皮的小猫)、交通工具(比亚迪U8汽车、飞机)、人(学生、教师)…… 这些对象都有着独特或共性的属性和方法来描述其…...
凉鞋的 Unity 笔记 106. 第二轮循环场景视图Sprite Renderer
106. 第二轮循环&场景视图&Sprite Renderer 从这一篇开始,我们开始进行第二轮循环。 这次我们至少能够在游戏运行窗口看到一些东西。 首先还是在场景层次窗口进行编辑,先创建一个 Sprite,操作如下: 创建后,会在 Scene …...
Vue中如何进行分布式路由配置与管理
Vue中的分布式路由配置与管理 随着现代Web应用程序的复杂性不断增加,分布式路由配置和管理成为了一个重要的主题。Vue.js作为一种流行的前端框架,提供了多种方法来管理Vue应用程序的路由。本文将深入探讨在Vue中如何进行分布式路由配置与管理࿰…...
Solidity 合约漏洞,价值 38BNB 漏洞分析
Solidity 合约漏洞,价值 38BNB 漏洞分析 1. 漏洞简介 https://twitter.com/NumenAlert/status/1626447469361102850 https://twitter.com/bbbb/status/1626392605264351235 2. 相关地址或交易 攻击交易: https://bscscan.com/tx/0x146586f05a451313…...
【C++】:类和对象(2)
朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux的基础知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…...
【GIT版本控制】--提交更改
一、添加文件到暂存区 在GIT中,要提交更改,首先需要将文件添加到暂存区(Staging Area)。这是一个用于存放将要提交的更改的临时区域。以下是将文件添加到暂存区的步骤: 打开终端或命令提示符:首先&#x…...
解决高分屏DPI缩放PC端百度网盘界面模糊的问题
第一步 更新最新版本 首先,在百度网盘官网下载最新安装包: https://pan.baidu.com/download 进行覆盖安装 第二步 修改兼容性设置 右键百度网盘图标,点击属性,在兼容性选项卡中点击更改所有用户的设置 弹出的选项卡中选择更改高…...
全能视频工具 VideoProc Converter 4K for mac中文
VideoProc 4K提供快速完备的4K影片处理方案,您可以透过这款软体调节输出影片格式和大小。能够有效压缩HD/4K影片体积90%以上,以便更好更快地上传到YouTube,或是通过电子邮件附件发送。业界领先的视讯压缩引擎,让你轻松处理大体积视…...
Vue中实现自定义编辑邮件发送到指定邮箱(纯前端实现)
formspree里面注册账号 注册完成后进入后台新建项目并且新建表单 这一步完成之后你将得到一个地址 最后就是在项目中请求这个地址 关键代码如下: submitForm() {this.fullscreenLoading true;this.$axios({method: "post",url: "https://xxxxxxx…...
计算机专业毕业设计项目推荐11-博客项目(Go+Vue+Mysql)
博客项目(GoVueMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式&am…...
QT实现TCP
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时,服务器已经成功进入监听状态,…...
PostgreSQL ash —— pgsentinel插件
一、 插件作用 众所周知,pg是没有像oracle那样的ash视图的,因此要回溯历史问题不太方便。pgsentinel插件会将pg_stat_activity与pg_stat_statements视图内容定期快照,并存入pg_active_session_history和pg_stat_statements_history视图中。 1…...
【刷题笔记10.5】LeetCode:排序链表
LeetCode:排序链表 一、题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 二、分析 这题咱们默认要求:空间复杂度为O(1)。所以这把咱们用自底向上的方法实现归并排序,则可以达到O(1) 的空间复杂…...
三、【色彩模式与颜色填充】
文章目录 Photoshop常用的几种颜色模式包括:1. RGB模式2. CMYK模式3. 灰度模式4. LAB模式5. 多通道模式 Photoshop颜色填充1.色彩基础2.拾色器认识3.颜色填充最后附上流程图: Photoshop常用的几种颜色模式包括: 1. RGB模式 详细可参考&…...
karmada v1.7.0安装指导
前言 安装心得 经过多种方式操作,发现二进制方法安装太复杂,证书生成及其手工操作太多了,没有安装成功;helm方式的安装,v1.7.0的chart包执行安装会报错,手工修复了报错并修改了镜像地址,还是各…...
OK3568 forlinx系统编译过程及问题汇总
1. 共享文件夹无法加载;通过网上把文件夹加载后,拷贝文件很慢,任务管理器查看发现硬盘读写速率很低。解决办法:重新安装vmware tools。 2. 拷贝Linux源码到虚拟机,解压。 3. 虚拟机基本库安装 forlinxubuntu:~$ sudo…...
JVM篇---第五篇
系列文章目录 文章目录 系列文章目录一、简述Java的对象结构二、如何判断对象可以被回收?三、JVM的永久代中会发生垃圾回收么?一、简述Java的对象结构 Java对象由三个部分组成:对象头、实例数据、对齐填充。 对象头由两部分组成,第一部分存储对象自身的运行时数据:哈希码…...
C/C++ 排序算法总结
1.冒泡排序 https://blog.csdn.net/weixin_49303682/article/details/119365319 1 #include <stdio.h>2 3 #define N 94 5 void print(int a[])6 {7 for(int i 0; i < N; i)8 {9 printf("%d ", a[i]); 10 } 11 printf("…...
机器学习---RBM、KL散度、DBN
1. RBM 1.1 BM BM是由Hinton和Sejnowski提出的一种随机递归神经网络,可以看做是一种随机生成的 Hopfield网络,是能够通过学习数据的固有内在表示解决困难学习问题的最早的人工神经网络之 一,因样本分布遵循玻尔兹曼分布而命名为BM。BM由二…...
(c语言)有序序列合并
#include<stdio.h>//输入包含三行 //第一行包含两个正整数n,m,用空格分割,n表示第二行第一个升序序列中 //数字的个数,m表示第三行第二个升序序列中数字的个数 //第二行包含n个整数,用空格分割 //第三行包含m个整数,用空格分割 //输出…...
如何快速使用iOS App Signer:iOS应用签名完整指南
如何快速使用iOS App Signer:iOS应用签名完整指南 【免费下载链接】ios-app-signer DanTheMan827/ios-app-signer: 是一个 iOS 应用的签名工具,适合用于 iOS 开发中,帮助开发者签署和发布他们的 APP。 项目地址: https://gitcode.com/gh_mi…...
力扣原题《长度最小的子数组》,无序版(不考虑元素必须要相邻)纯手搓,已验证,有序版在下一篇
给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:t…...
Umi-OCR插件终极指南:如何选择最适合你的文字识别方案
Umi-OCR插件终极指南:如何选择最适合你的文字识别方案 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 还在为文档扫描、图片文字提取效率低下而烦恼吗?Umi-OCR插件库为你提供了全…...
Umi-OCR插件技术方案:5款引擎深度对比与实战配置指南
Umi-OCR插件技术方案:5款引擎深度对比与实战配置指南 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins Umi-OCR插件库为开源OCR工具提供了丰富的引擎选择,从本地CPU加速到云端AI识…...
光阀的“第二曲线”:投影行业LCOS技术现状与发展趋势分析
1. 报告导读与核心摘要 在投影显示技术的版图中,LCoS(硅基液晶,Liquid Crystal on Silicon)长期处于一种微妙的位置:它拥有DLP无法比拟的画质潜力,却因成本和体积问题始终未能真正撼动DLP的市场地位。然而,2025-2026年行业展会上的一系列技术突破,正在改写这一格局。 …...
RSA宣布与Microsoft扩大合作,进一步巩固公司在无密码身份安全领域的领导地位
创新合作开启安全、基于人工智能的员工身份验证新时代 RSA今日在RSAC 2026大会上宣布,将扩大对全新Microsoft 365 E7:The Frontier Suite解决方案的支持。这一新增支持结合了额外的无密码功能,在企业拥抱人工智能驱动的生产力未来之际&#…...
Papercups开源客户聊天系统:7步快速定制部署完整指南
Papercups开源客户聊天系统:7步快速定制部署完整指南 【免费下载链接】papercups Open-source live customer chat 项目地址: https://gitcode.com/gh_mirrors/pa/papercups Papercups是一个功能强大的开源实时客户聊天系统,专为注重数据隐私和安…...
基于LSTM的短期电力负荷预测研究
【负荷预测】基于LSTM短期负荷预测,可考虑需求响应 短期电力负荷预测在电力系统的调度、生产和规划中起着重要的作用,精准的负荷预测有利于决策者做出正确决策计划以及有利于电力系统的稳定运行。 多个售电主体的市场竞争带来了电价的波动,以…...
Python实现简易可信度推理引擎:用20行代码复现经典CF模型
Python实现简易可信度推理引擎:用20行代码复现经典CF模型 在金融风控领域,规则引擎的可信度评估直接影响着决策的准确性。想象一下,当系统需要同时处理多条相互矛盾的交易警报时,如何量化每条证据的可信程度?这正是可…...
AI辅助开发中的Codec VAD优化实践:从算法原理到工程落地
在实时音视频应用里,语音活动检测(VAD)就像个“守门员”,负责精准判断当前有没有人在说话。这个判断准不准、快不快,直接关系到后续的编码、传输乃至降噪、唤醒等一系列流程的效率。尤其在AI辅助开发的框架下ÿ…...
