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

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...