当前位置: 首页 > 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;用空格分割 //输出…...

小谈设计模式(18)—适配器模式

小谈设计模式&#xff08;18&#xff09;—适配器模式 专栏介绍专栏地址专栏介绍 适配器模式角色分析目标接口&#xff08;Target&#xff09;源接口&#xff08;Adaptee&#xff09;适配器&#xff08;Adapter&#xff09; 核心思想应用场景Java程序实现输出结果程序分析123 优…...

Python柱形图

柱形图 柱形图&#xff0c;又称长条图、柱状统计图、条图、条状图、棒形图&#xff0c;是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值&#xff08;不同时间或者不同条件&#xff09;&#xff0c;只有一个变量&#xff0c;通常利用于较小的数据集分析…...

用OpenCV(Python)获取图像的SIFT特征

import cv2 as cv import numpy as np import matplotlib.pyplot as plt imgcv.imread("../Lena.png") img_graycv.cvtColor(img,cv.COLOR_BGR2GRAY)#创建一个SIFI对象 siftcv.SIFT_create()#使用SIFT对象在灰度图像img_gray中检测关键点&#xff0c;结果存储在变量k…...

阿里云ECS和轻量服务器有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…...

华为云云耀云服务器L实例评测|安装搭建学生成绩管理系统

1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格&#xff0c;满足您对成本、性能及技术创新的诉求。云耀云服务器L实例提供丰富严选的应用镜像&#xff0c;实现应用一键部署&#xff0c;助力客户便捷高效的在…...

Audacity 使用教程:轻松录制、编辑音频

Audacity 使用教程&#xff1a;轻松录制、编辑音频 1. 简介 Audacity 是一款免费、开源且功能强大的音频录制和编辑软件。它适用于 Windows、Mac 和 Linux 等多种操作系统&#xff0c;适合音乐制作、广播后期制作以及普通用户进行音频处理。本教程将带领大家熟悉 Audacity 的…...

深入了解“注意力”和“变形金刚”-第2部分

一、说明 在上一个故事中&#xff0c;我已经解释了什么是注意力机制&#xff0c;以及与转换器相关的一些重要关键字和块&#xff0c;例如自我注意、查询、键和值以及多头注意力。 在这一部分中&#xff0c;我将解释这些注意力块如何帮助创建转换器网络&#xff0c;并详细讨论网…...

​“债务飙升!美国一天内增加2750亿美元,金融震荡的前奏已拉开帷幕!”

2023年10月4日&#xff0c;美国政府向美国债务追加2750亿美元&#xff0c;相当于现在比特币&#xff08;BTC&#xff09;总市值的一半还多。 有人会说:多一点、少一点&#xff0c;没什么区别.....确实&#xff0c;当你看美国债务时&#xff0c;2750亿美元并没有什么意义&#x…...

最新Uniapp软件社区-全新带勋章源码

测试环境&#xff1a;php7.1。ng1.2&#xff0c;MySQL 5.6 常见问题&#xff1a; 配置好登录后转圈圈&#xff0c;检查环境及伪静态以及后台创建好应用 上传图片不了&#xff0c;检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图&#xff0c;在前端uitl文件夹里面…...

基于goravel的CMS,企业官网通用golang后台管理系统

2023年9月11日10:47:00 仓库地址&#xff1a; https://gitee.com/open-php/zx-goravel-website 框架介绍 Goravel SCUI 后端开发组件 go 1.20 Goravel 1.13 数据库 sql(使用最新日期文件) goravel\doc\sql_bak mysql 8.0 前端开发组件 scui 1.6.9 node v14.21.3 效果图…...

联通屏蔽wordpress/招聘网络营销推广人员

实例一&#xff1a;数学计算 简述&#xff1a;这里有四个数字&#xff0c;分别是&#xff1a;1、2、3、4 提问&#xff1a;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; Python解题思路分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3…...

wordpress答题插件/网站首页推广

本文将展示如何利用Python中的NetworkX模块来绘制深度神经网络&#xff08;DNN&#xff09;结构图。  在文章Keras入门&#xff08;一&#xff09;搭建深度神经网络&#xff08;DNN&#xff09;解决多分类问题中&#xff0c;我们创建的DNN结构图如下&#xff1a; 该DNN模型由…...

dreamweaver网页设计期末考试/志鸿优化网

美食无处不在&#xff0c;每天分享不同零食、烹饪技巧和新奇食物。在寻找美食的道路上一个前行&#xff0c;希望得到大家的肯定。生活节奏的加快&#xff0c;迫使我们吃饭的速度也在提升。速食产品受到大家的喜爱&#xff0c;方便面和汉堡这些食物也成为了我们的第一选择&#…...

个人作品集网站模板/网站关键词优化网站推广

jQuery实时监听获取input输入框的值&#xff0c;在我们日常web项目开发也常需要去实现这样的功能效果。为了作出即时动作去引导浏览者&#xff0c;以便提高网站的用户体验感。 下面我们就结合具体的代码示例&#xff0c;为大家介绍jQuery实时获取input输入框的值的实现方法。 …...

真人做爰视频网站免费/班级优化大师功能介绍

选择排序1 算法思想选择排序是通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此属于非线性时间比较类排序中的交换排序。首先在未排序序列中找到最小(大)值&#xff1a;初始假定第一位为最小(大)值&#xff0c;用一个指针min_inde…...

免费成品网站模板/seo合作代理

I/O流基础概念 按照流的方向分为输入流&#xff08;InputStream&#xff09;与输出流(OuputStream)&#xff1a; 输入流&#xff1a;只能读取数据&#xff0c;不能写入数据。输出流&#xff1a;只能写入数据&#xff0c;不能读取数据。 因为程序是运行在内存中&#xff0c;以…...