Python面向对象编程详细解析(都带举例说明!)

news2024/10/5 21:14:19

在这里插入图片描述

前言

Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法封装在一起,形成一个对象。 Python中的面向对象编程包括以下内容:

目录点击对应章节可直接跳转

  • 前言
    • 1.类和对象
    • 2.封装
    • 3.继承
    • 4.多态
    • 5.抽象类和接口
    • 6.静态方法和类方法
  • 结语:

在这里插入图片描述

想找辣条哥的话直接戳这里,辣条之前的一些Python相关都可以拿走:在这里插入图片描述

1.类和对象

类是一种抽象的数据类型,它定义了一组属性和方法,用于描述某一类对象的共同特征和行为。对象是类的实例化,它具有类定义的属性和方法。

举例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

person1 = Person("Alice", 25)
person1.say_hello()  # 输出:Hello, my name is Alice and I am 25 years old.

在上面的例子中,Person 是一个类,它有两个属性 name age ,以及一个方法 say_helloperson1 Person 类的一个对象,它具有 nameage 属性,以及 say_hello 方法。

2.封装

封装是一种将数据和方法包装在一起的机制,以保护数据不被外部直接访问和修改。在 Python 中,可以使用属性和方法的访问控制来实现封装。

举例:

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance

    def deposit(self, amount):
        self.__balance += amount

    def withdraw(self, amount):
        if amount > self.__balance:
            print("Insufficient balance.")
        else:
            self.__balance -= amount

    def get_balance(self):
        return self.__balance

account1 = BankAccount(1000)
account1.deposit(500)
account1.withdraw(200)
print(account1.get_balance())  # 输出:1300

在上面的例子中,BankAccount 类有一个私有属性 __balance,它不能被外部直接访问。depositwithdraw 方法可以修改 __balance 属性,但是外部无法直接修改它。get_balance 方法可以返回 __balance 属性的值,但是外部无法直接访问它。

3.继承

继承是一种从已有类派生出新类的机制,新类继承了已有类的属性和方法,并可以添加自己的属性和方法。在 Python 中,可以使用 class 子类名(父类名) 的语法来实现继承。

举例:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("Woof!")

class Cat(Animal):
    def speak(self):
        print("Meow!")

dog1 = Dog("Fido")
cat1 = Cat("Fluffy")
dog1.speak()  # 输出:Woof!
cat1.speak()  # 输出:Meow!

在上面的例子中,Animal 是一个基类,它有一个属性 name 和一个方法 speakDog Cat Animal 的子类,它们继承了 Animal 的属性和方法,并分别实现了自己的 speak 方法。

4.多态

多态是一种同一种操作作用于不同的对象上,可以产生不同的结果的机制。在 Python 中,多态可以通过继承和方法重写来实现。

举例:

class Shape:
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

shapes = [Rectangle(5, 10), Circle(3)]
for shape in shapes:
    print(shape.area())

在上面的例子中,Shape 是一个基类,它有一个 area 方法。Rectangle Circle Shape 的子类,它们分别实现了自己的 area 方法。在 shapes 列表中,存储了一个 Rectangle 对象和一个 Circle 对象,它们都有 area 方法,但是具体的实现不同,因此可以产生不同的结果。

5.抽象类和接口

抽象类是一种不能被实例化的类,它只能被用作其他类的基类。抽象类中可以定义抽象方法,但是不能实现它们。接口是一种只包含抽象方法的类,它用于定义类之间的通信协议。

在 Python 中,可以使用 abc 模块来定义抽象类和接口。

举例:

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

shapes = [Rectangle(5, 10), Circle(3)]
for shape in shapes:
    print(shape.area())

在上面的例子中,Shape 是一个抽象类,它有一个抽象方法 areaRectangleCircle Shape 的子类,它们实现了 area 方法。由于 Shape 是抽象类,因此不能被实例化。在 shapes 列表中,存储了一个 Rectangle 对象和一个 Circle 对象,它们都实现了 area 方法,因此可以被用作 Shape 类型的对象。

6.静态方法和类方法

静态方法是一种不需要访问实例属性和方法的方法,它可以直接通过类名调用。类方法是一种需要访问类属性和方法的方法,它可以通过类名或实例名调用。

在 Python 中,可以使用 @staticmethod @classmethod 装饰器来定义静态方法和类方法。

举例:

class Calculator:
    @staticmethod
    def add(x, y):
        return x + y

    @classmethod
    def multiply(cls, x, y):
        return cls.__name__ + ": " + str(x * y)

print(Calculator.add(2, 3))  # 输出:5
print(Calculator.multiply(2, 3))  # 输出:Calculator: 6

在上面的例子中,Calculator 类有一个静态方法 add 和一个类方法 multiplyadd 方法不需要访问实例属性和方法,因此可以定义为静态方法。multiply 方法需要访问类属性和方法,因此可以定义为类方法。在调用静态方法和类方法时,可以直接使用类名调用。

结语:

Python的面向对象编程具有灵活性和可扩展性,可以更好地组织和管理代码,提高代码的复用性和可维护性。

↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据治理项目易失败?企业数据治理的解决思路在这里

据Gartner 的一项调查显示,我国超过90%的数据治理项目都失败了。大家的感受也是如此:数据治理的项目不好落地,数据治理项目实施起来从理论到实践有一条巨大的鸿沟很难跨越。 失败的原因各种各样,总结起来大概有4类: …

编译原理个人作业--第六章——基于 编译原理 国防工业出版社 第三版

2 对表达式((a)(b)) (1) 按照表6.4属性文法构造抽象语法树 (2) 按6.17翻译模式构造表达式抽象语法树 5(1) 下列文法对整型常数、实型常熟世家加法运算符 生成表达式,当两个整型数相加,结果为整形,否则结果为实型 E → E T ∣ T E\r…

软件测试面试题

一、描述 TCP/IP 协议的层次结构,以及每一层中重要协议 TCP/IP(Transmission Control Protocol/Internet Protocol)是互联网的核心协议套件,它定义了在网络中进行通信的规则和标准。TCP/IP协议栈按照层次结构划分,每一…

【DataTable.js】DataTable基础应用

一、简介 DataTables是一个功能强大的Javascript库,用于向HTML表中添加交互特性,虽然简单性是整个项目的核心设计原则,但一开始可能会让人望而生畏。然而,采取这些第一步,让DataTables在你的网站上运行实际上是相当直…

测试——四元数绕轴旋转

float angle 40;Vector3 v rotatePoint.transform.position;Debug.Log("旋转向量 " v "__自身 " cube.transform.rotation);v.Normalize();Debug.Log(v);float f angle * Mathf.Deg2Rad / 2;float sinHalfAngle Mathf.Sin(f);float cosHalfAngle M…

智慧梁场3D建模

智慧梁场3D建模:数字化革命下的新起点 ​ 随着科技的迅猛发展,数字化已经成为了现代工业生产的必然趋势。作为传统工业的核心产业,建筑行业也在不断地探索数字化变革的新路径。而“智慧梁场3D建模”便是其中的一项杰出实践。 ​ 梁场是建筑…

FreeRTOS:系统内核控制函数

目录 前言一、内核控制函数预览二、内核控制函数详解2.1强制上下文切换宏2.2临界区2.3可屏蔽中断2.4调度器2.5调整系统节拍 前言 FreeRTOS 中有一些函数只供系统内核使用,用户应用程序一般不允许使用,这些 API 函 数就是系统内核控制函数。内核控制的一…

【iOS】—— iOS中的相关锁

文章目录 自旋锁1.OSSpinLock2.os_unfair_lock3.atomic 互斥锁pthread_mutexsynchronizedobjc_sync_enterobjc_sync_exit注意事项 NSLockNSRecursiveLock信号量条件锁NSConditionNSConditionLock 读写锁总结 锁作为一种非强制的机制,被用来保证线程安全。每一个线程…

数字时代安全文件共享的重要性

数字时代彻底改变了工作、学习、交流和生活方式的方式。从在线协作到远程工作和电子学习,数字世界为全球各地的人们开辟了新的机遇。然而,伴随着这种便利性和可访问性而来的是对安全文件共享的需求。随着越来越多的机密信息在网上共享,窃取该…

常用数据可视化相关型图表大全

大数据时代,工作中我们可能经常会需要处理很多数据,需要在总结汇报中展示呈现,俗话说“字不如表,表不如图”,那么如何缩短数据与用户的距离?让用户一眼Get到重点? 在理解或分析大量数据时,数据可视化起着…

开始第一个vue项目,环境搭建+html项目运行

【用vue.js,通过script标签导入】 1. 搭建vue脚手架 安装node js安装cnpm(淘宝源) 【vue】在windows中搭建vue开发环境(全网最详细)_vue环境搭建_一起来学吧的博客-CSDN博客2a 2. 官网下载地址: 安装 …

Python实现ACO蚁群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

伟大的公司只需要十一人

在生成式AI、云计算等技术逐渐抹平大企业与中小企业之间的技术、成本差距后,各企业真正比拼的,只剩下人才、创意与执行力。 目前,随着AI技术的快速迭代,各种基于AIGC(人工智能内容生成)技术的产品不断涌向…

pytest自动化测试框架和unittest自动化测试框架的区别

目录 Unittest vs Pytest 用例编写规则 用例前置与后置条件 断言 测试报告 失败重跑机制 参数化 用例分类执行 实例演示 前后置区别 参数化区别 总结 python的单元测试框架经常使用的是unittest,因为它比较基础,并且可以进行二次开发&#xf…

分布式事务的21种武器 - 3

在分布式系统中,事务的处理分布在不同组件、服务中,因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式,并分析其实现原理和优缺点,在面对具体分布式事务问题时,可以选择合适的模式…

时间序列预测 | Matlab基于最小二乘支持向量机LSSVM时间序列预测,LSSVM时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %----------------…

如何落地中台架构

大家好,我是易安!今天我分享下如何落地中台架构。 前台和后台 讲中台之前,我们先来理解下前台和后台,这样,你才能更清楚中台的定位。 前台 比较好理解,指的是 面向C端的应用,比如像微信、淘宝这…

数字音频接口I2S-PDM-TDM-PCM

主要分类:模拟、数字(I2S、PCM、PDM、TDM) 模拟音频,就是功放输出的,驱动音箱和喇叭的音频。模拟麦克风采样回来的数据也是模拟音频。通常会有单端或差分两种信号。 数字音频,不能直接驱动喇叭&#xff0…

混剪功能开发——抖音账号矩阵系统源码解析

抖音是目前国内非常流行的短视频平台之一,用户数量庞大,更是吸引了许多企业和个人在上面开设账号,通过发布内容来进行流量变现。但是,在一个账号发布内容的同时,管理员又需要同时关注多个账号,对账号的管理…

vs code 配置net 开发环境.并搭配vs相似的解决方案面板

由于在本人在Linux22.04下安装Rider 一直处于卡死系统状态.不得不使用该方式 以下为安装步骤 安装 VS code https://code.visualstudio.com/Download 安装 mono https://www.mono-project.com/download/stable/#download-lin 安装 NET SDK https://learn.microsoft.com/zh…