当前位置: 首页 > news >正文

Python 无废话-基础知识面向对象编程详解

类定义

如何理解万物皆对象

生活中一些事物,动物(可爱的小狗、调皮的小猫)、交通工具比亚迪U8汽车、飞机)、人(学生、教师)

这些对象都有着独特或共性的属性和方法来描述其特征和行为

类定义

将上述图片可以分类,动物类、交通工具类、人类……

类是一种用来创建对象的蓝图或模板,定义了对象的属性和方法,并通过实例化来创建具体的对象

作用:使代码更加模块化、可维护和可扩展

通过定义类,则可以创建多个具有相同属性和方法的对象,这些对象被称为类的实例。例如,定义一个名为“Person”的类,然后创建多个不同的人的实例,如学生、教师、校长、主任……

定义类的语法结构

class ClassName:

         # 类属性

         name=“test”

        # 初始化方法

         def __init__(self, parameters):

        # 类方法

        def method_name(self, parameters):

语法解析

1)关键字 class 用于定义一个类,后面紧跟着类名 ClassName
2)类 名通常使用首字母大写的驼峰命名法来命名,以区别于变量和函数名

      3)在类体中,可以定义类的属性和方法

       4)类属性是属于类本身的属性,可以被所有该类的实例共享

5)方法 是类的函数,用于定义类的行为和功能 ( 函数在类里面称为方法 )

体中的 __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()

类的属性值修改

修改类属性的值,有以下几种方法

  1. 直接通过类名访问和修改属性

  class classTest:

        attribute = "old value"

classTest.attribute = "new value"

  1.   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中如何进行分布式路由配置与管理&#xff0…...

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);// 此时,服务器已经成功进入监听状态&#xff0c…...

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提出的一种随机递归神经网络&#xff0c;可以看做是一种随机生成的 Hopfield网络&#xff0c;是能够通过学习数据的固有内在表示解决困难学习问题的最早的人工神经网络之 一&#xff0c;因样本分布遵循玻尔兹曼分布而命名为BM。BM由二…...

(c语言)有序序列合并

#include<stdio.h>//输入包含三行 //第一行包含两个正整数n,m&#xff0c;用空格分割,n表示第二行第一个升序序列中 //数字的个数,m表示第三行第二个升序序列中数字的个数 //第二行包含n个整数&#xff0c;用空格分割 //第三行包含m个整数&#xff0c;用空格分割 //输出…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...