Python 面向对象编程详解

Python 面向对象编程详解

面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在 Python 中,面向对象编程非常强大,允许开发者通过类(class)和对象(object)来模拟现实世界的行为和属性。

什么是面向对象编程

面向对象编程是一种编程范式,它允许开发者创建包含属性(数据)和方法(函数)的对象。这种方法有助于组织复杂的代码结构,使得代码更加模块化和可重用。

Python 类的定义与实例化

在 Python 中,类是对象的蓝图或模板。你可以使用 class 关键字来定义一个类。

class Dog:def __init__(self, name):self.name = name# 实例化
my_dog = Dog("Buddy")
print(my_dog.name)  # 输出: Buddy

Python 实例属性的定义

实例属性是绑定到类实例的属性。每个对象实例都可以拥有不同的属性值。

class Dog:def __init__(self, name, age):self.name = nameself.age = age# 创建实例
my_dog = Dog("Buddy", 5)
print(my_dog.age)  # 输出: 5

Python 实例属性的初始化

实例属性通常在类的构造方法 __init__ 中初始化。

class Dog:def __init__(self, name, age):self.name = nameself.age = age# 创建实例
my_dog = Dog("Buddy", 5)

Python 类属性

类属性是对于类的所有实例都是共享的属性。

class Dog:species = "Canis familiaris"  # 类属性def __init__(self, name, age):self.name = nameself.age = age# 所有实例共享类属性
print(Dog.species)  # 输出: Canis familiaris

Python 类属性和实例属性的优先级

如果实例属性和类属性名称相同,实例属性将优先。

class Dog:species = "Canis familiaris"def __init__(self, name, age):self.name = nameself.age = ageself.species = "Canis lupus"my_dog = Dog("Buddy", 5)
print(my_dog.species)  # 输出: Canis lupus

Python 中的访问限制

在 Python 中,可以通过前缀属性名字以双下划线 __ 来限制访问。

class Dog:def __init__(self, name, age):self.__name = name  # 私有属性self.age = agedef get_name(self):return self.__namemy_dog = Dog("Buddy", 5)
# print(my_dog.__name)  # 将引发错误
print(my_dog.get_name())  # 正确访问

Python 定义实例方法

实例方法是定义在类中的函数,它们可以通过对象调用。

class Dog:def __init__(self, name, age):self.name = nameself.age = agedef speak(self):return "Woof!"my_dog = Dog("Buddy", 5)
print(my_dog.speak())  # 输出: Woof!

Python 定义类方法

类方法是使用 @classmethod 装饰器定义的,它们不需要创建类的实例。

class Dog:@classmethoddef info(cls):return "This is a dog class"print(Dog.info())  # 输出: This is a dog class

Python 类的继承

类的继承允许我们从已有的类中继承属性和方法,然后添加或修改它们。这是代码重用的一个非常有效的方式。

class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"dog = Dog("Buddy")
cat = Cat("Whiskers")print(dog.speak())  # 输出: Woof!
print(cat.speak())  # 输出: Meow!

以上介绍了 Python 中面向对象编程的基本概念和用法,包括类的定义、属性和方法的使用,以及访问限制和类的继承等。通过这些基础知识,可以构建更复杂和功能丰富的 Python 应用程序。

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

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

相关文章

langchain实现基于sql的问答

1. 数据准备 import requestsurl "https://storage.googleapis.com/benchmarks-artifacts/chinook/Chinook.db"response requests.get(url)if response.status_code 200:# Open a local file in binary write modewith open("Chinook.db", "wb&qu…

pip更换国内源,加速Python包下载(附2024年12月最新国内镜像源列表)

pip是什么 pip 是 Python 包管理工具,它允许用户从 Python 包索引(PyPI)安装和管理软件包。pip 是 Python 的官方包安装程序,它提供了一个命令行界面,用户可以通过它来安装、卸载、查看和管理 Python 包。以下是 pip …

安全关系型数据库查询新选择:Rust 语言的 rust-query 库深度解析

在当今这个数据驱动的时代,数据库作为信息存储和检索的核心组件,其重要性不言而喻。然而,对于开发者而言,如何在保证数据安全的前提下,高效地进行数据库操作却是一项挑战。传统的 SQL 查询虽然强大,但存在诸…

linux-10 关于shell(九)认证、授权、审计

之前提到过的一些基本应用,对Linux系统而言,安装完成以后,它给我们提供一个登录界面,对吧?这个登录界面说白了就是验证用户的,身份的,我昨天提到过,一般而言,每一个使用者…

VSCode中“Run Code”运行程序时,终端出现中文乱码解决方法

问题描述 在VSCode中“Run Code”运行程序时,终端输出结果出现中文乱码现象: 解决方法 1. 检查系统cmd的默认编码 查看Windows终端当前编码方式的命令: chcp输出结果是一段数字代码,如936,这说明当前的cmd编码方式…

【Python】ASCII-generator 将图像、文本或视频转换为 ASCII 艺术 生成字符图(测试代码)

目录 预览效果安装环境报错分析基本例程总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 预览效果 原图 黑白图 彩色图 安装环境 拉取代码 https://github.com/vietnh1009/ASCII-generatorpython3.8 pip install…

量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于发明者FMZ平台介绍。 发明…

Qt桌面应用开发 第十天(综合项目二 翻金币)

目录 1.主场景搭建 1.1重载绘制事件,绘制背景图和标题图片 1.2设置窗口标题,大小,图片 1.3退出按钮对应关闭窗口,连接信号 2.开始按钮创建 2.1封装MyPushButton类 2.2加载按钮上的图片 3.开始按钮跳跃效果 3.1按钮向上跳…

【maven-4】IDEA 配置本地 Maven 及如何使用 Maven 创建 Java 工程

IntelliJ IDEA(以下简称 IDEA)是一款功能强大的集成开发环境,广泛应用于 Java 开发。下面将详细介绍如何在 IDEA 中配置本地 Maven,并创建一个 Maven Java 工程,快速上手并高效使用 Maven 进行 Java 开发。 1. Maven …

详细了解索引规约

索引规约 在大厂中数据量非常庞大,也有很多高并发场景,因此在大厂中使用索引规约主要是为了规范索引的创建、使用及管理,确保数据库性能的高效与稳定,避免因随意或不合理创建索引带来诸如占用过多存储资源、影响数据更新效率等问…

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出,因此,再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长,现在只给出一部分,需要自己再补充另一部分。之前的为: 感谢郭师兄的指导(https://blo…

vue3图片报错转换为空白不显示的方法

vue3图片报错转换为空白不显示的方法 直接上代码&#xff1a; <el-table-column label"领料人" align"center"><template #default"scope"><el-imagev-if"scope.row.receiver":src"scope.row.receiver"style…

在OpenHarmony系统下开发支持Android应用的双框架系统

在 OpenHarmony 系统下开发支持 Android 应用的双框架系统&#xff0c;主要的目标是实现 OpenHarmony 本身作为底层操作系统&#xff0c;并通过兼容层或者桥接技术&#xff0c;允许 Android 应用在其上运行。双框架系统的架构设计会涉及到 OpenHarmony 和 Android 的结合&#…

混沌工程/混沌测试/云原生测试/云平台测试

背景 私有云/公有云/混合云等具有复杂&#xff0c;分布式&#xff0c;环境多样性等特点&#xff0c;许多特殊场景引发的线上问题很难被有效发现。所以需要引入混沌工程&#xff0c;建立对系统抵御生产环境中失控条件的能力以及信心&#xff0c;提高系统面对未知风险得能力。 …

C++之 String 类的模拟实现

本文只简述string类模拟实现的重点&#xff0c;其余不再过多赘述 一、模拟实现string类的构造函数 本文主要实现下图两个构造函数&#xff0c;即string()和string(const string& str) 而关于string的底层&#xff0c;其实就是数组&#xff0c;在物理逻辑上是连续的空间&am…

数据结构基础之《(9)—归并排序》

一、什么是归并排序 1、整体是递归&#xff0c;左边排好序右边排好序merge让整体有序 2、让其整体有序的过程里用了排外序方法 3、利用master公式来求解时间复杂度 4、当然可以用非递归实现 二、归并排序说明 1、首先有一个f函数 void f(arr, L, R) 说明&#xff1a;在arr上…

Pytorch深度学习笔记

1、大于或等于三维的张量没有名称&#xff0c;统一叫张量。 点-----标量&#xff08;Scalar&#xff09;----0阶张量是标量----只有数值大小&#xff0c;没有方向&#xff0c;部分有正负之分 线-----向量&#xff08;Vector&#xff09;----1阶张量是向量----有大小和方向&…

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …

[代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和

前言 哈希表是什么&#xff1f;一句话带你理解&#xff0c;简单来说我们对于杂乱的数据&#xff0c;怎么快速找到数据&#xff0c;如何做呢&#xff1f;一般的做法就是遍历复杂度为o(N)去找寻一个数据&#xff0c;但是吧&#xff0c;我们这样思考的话&#xff0c;还是花了大量时…

三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序

三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序 文章目录 前言三维路径规划|基于黑翅鸢BKA优化算法的三维路径规划Matlab程序基于黑翅鸢BKA优化算法的三维路径规划一、研究基本原理二、黑翅鸢BKA优化算法的基本步骤&#xff1a;三、详细流程四、总结 二、实验结果…