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

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...