当前位置: 首页 > news >正文

Python从入门到精通秘籍十七

一、Python的构造方法

在Python中,构造方法是一个特殊的方法,用于创建和初始化类的实例。构造方法的名称是__init__(),它在创建对象时自动调用。

下面是一个示例代码来详细解释Python的构造方法:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef display_info(self):print(f"Name: {self.name}, Age: {self.age}")# 创建Person类的实例
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)# 调用display_info()方法显示信息
person1.display_info()
person2.display_info()

在上面的代码中,我们定义了一个名为Person的类,并在其中定义了构造方法__init__()。构造方法有两个参数nameage,用于初始化对象的属性。

在构造方法中,我们使用self关键字引用当前对象,将传递给构造方法的值分配给对象的属性self.nameself.age

在类中定义了一个名为display_info()的方法,用于显示对象的信息。

然后,我们使用Person类创建了两个实例person1person2,并分别传递不同的参数。

最后,通过调用实例的display_info()方法,我们可以显示每个实例的信息。

运行上述代码,输出结果将会是:

Name: Alice, Age: 25
Name: Bob, Age: 30

这样,我们就可以通过构造方法来创建对象并初始化其属性。构造方法在对象创建时自动调用,并为对象提供所需的初始值。

二、Python的魔术方法

在Python中,魔术方法是一种特殊的方法,它们以双下划线开头和结尾(例如__init__())。这些方法用于执行特定的操作或实现特定的行为。下面是一些常见的Python魔术方法:

  1. __init__(self, ...): 构造方法,在创建对象时自动调用,用于初始化对象。
  2. __str__(self): 返回对象的字符串表示,可通过print()函数打印对象时调用。
  3. __repr__(self): 返回对象的字符串表示,通常用于调试目的。
  4. __len__(self): 返回对象的长度,可通过内置函数len()调用。
  5. __getitem__(self, key): 根据给定的索引或键获取对象的元素,可通过索引、切片或字典方式访问对象。
  6. __setitem__(self, key, value): 根据给定的索引或键设置对象的元素,可通过索引、切片或字典方式修改对象。
  7. __delitem__(self, key): 根据给定的索引或键删除对象的元素,可通过索引、切片或字典方式删除对象。
  8. __iter__(self): 返回一个迭代器对象,使对象可迭代,可使用for循环遍历对象。
  9. __next__(self): 返回迭代器的下一个值,与__iter__()方法一起使用。
  10. __call__(self, ...): 将对象作为函数调用时调用,使对象具有可调用的行为。
  11. __enter__(self)__exit__(self, exc_type, exc_value, traceback): 与with语句一起使用,实现上下文管理器,用于定义对象进入和退出上下文时的操作。

以下是一个示例代码,演示了如何使用其中几个魔术方法:

class Book:def __init__(self, title, author):self.title = titleself.author = authordef __str__(self):return f"Book: {self.title} by {self.author}"def __len__(self):return len(self.title)def __getitem__(self, index):return self.title[index]def __setitem__(self, index, value):self.title = self.title[:index] + value + self.title[index+1:]def __delitem__(self, index):self.title = self.title[:index] + self.title[index+1:]def __iter__(self):self.index = 0return selfdef __next__(self):if self.index >= len(self.title):raise StopIterationchar = self.title[self.index]self.index += 1return charbook = Book("Python Cookbook", "David Beazley")
print(book)  # 调用__str__()方法
print(len(book))  # 调用__len__()方法
print(book[3])  # 调用__getitem__()方法
book[2] = 't'  # 调用__setitem__()方法
print(book.title)
del book[2]  # 调用__delitem__()方法
print(book.title)for char in book:  # 调用__iter__()和__next__()方法print(char)

通过运行上述代码,输出结果为:

Book: Python Cookbook by David Beazley
16
h
Python Cooktbook
Pyon Cooktbook
P
y
t
o
nC
o
o
k
t
b
o
o
k

这个示例演示了魔术方法的一些常见用法。你可以根据自己的需求实现其他魔术方法,以满足特定的功能需求。

三、Python的封装

封装是面向对象编程中的一个重要概念,它指的是将数据和方法包装在一个类中,并通过访问控制来限制对数据的直接访问。Python通过使用属性和方法来实现封装。下面是一个示例代码,演示了如何在Python中实现封装:

class Person:def __init__(self, name, age):self._name = name  # 使用单个下划线表示属性为受保护的self.__age = age  # 使用双下划线表示属性为私有的def display_info(self):print(f"Name: {self._name}, Age: {self.__age}")def get_age(self):return self.__agedef set_age(self, age):if age >= 0:self.__age = ageelse:print("Age cannot be negative!")person = Person("Alice", 25)
person.display_info()print(person._name)  # 访问受保护的属性
# print(person.__age)  # 错误,无法直接访问私有属性print(person.get_age())  # 通过公共方法获取私有属性的值
person.set_age(30)  # 通过公共方法设置私有属性的值
print(person.get_age())
person.set_age(-10)  # 尝试设置负数年龄

运行上述代码,输出结果为:

Name: Alice, Age: 25
Alice
25
30
Age cannot be negative!

在上面的代码中,我们定义了一个名为Person的类,并在其中封装了_name__age属性。

属性_name使用单个下划线作为前缀,表示它是受保护的属性,外部可以访问但应该被视为私有的。

属性__age使用双下划线作为前缀,表示它是私有的属性,外部无法直接访问。

我们定义了display_info()方法来显示对象的信息,并使用get_age()set_age()方法分别来获取和设置私有属性__age的值。在set_age()方法中,我们进行了一些条件检查以确保年龄不会是负数。

通过创建Person对象并调用其公共方法,我们可以访问和修改封装在类内部的属性。但是,直接访问受保护的属性和私有属性将会导致错误或访问限制。

这样,我们就实现了对数据的封装,通过公共方法来控制对私有属性的访问和修改。这提供了更好的代码组织和安全性。

相关文章:

Python从入门到精通秘籍十七

一、Python的构造方法 在Python中,构造方法是一个特殊的方法,用于创建和初始化类的实例。构造方法的名称是__init__(),它在创建对象时自动调用。 下面是一个示例代码来详细解释Python的构造方法: class Person:def __init__(se…...

Java——抽象类和接口

目录 1.抽象类 1.概念: 2.语法 3.特性 2.接口 1.概念 2.语法 3.特性 1.抽象类 1.概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的…...

React—— props校验(非typescript校验类型)

非typescript环境下,当我们在封装组件的时候,接受props时传入的内容,需要做类型检测,那我们可以用props校验进行类型的检查。 props校验允许在创建组件的时候,就约定props的格式、类型等 实现步骤: 导入 …...

Go——map操作及原理

一.map介绍和使用 map是一种无序的基于key-value的数据结构,Go语言的map是引用类型,必须初始化才可以使用。 1. 定义 Go语言中,map类型语法如下: map[KeyType]ValueType KeyType表示键类型ValueType表示值类型 map类型的变量默认…...

网络安全实训Day9

写在前面 访问控制和防火墙桌面端安全检测与防御 网络安全实训-网络安全技术 网络安全概述 访问控制 定义:通过定义策略和规则来限制哪些流量能经过防火墙,哪些流量不能通过。本质是包过滤 可以匹配的元素 IP协议版本 源区域和目的区域 源IP地址和目…...

kubernetes实战(1)之虚拟机centos搭建k8s集群

一,环境准备 centos7系统,每个系统2c2g,40g,centos7下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 # 每个节点分别设置对应主机名 hostnamectl set-hostname master hostnamectl set-hostname …...

基于python+vue分类信息服务平台移动端的设计与实现flask-django-php-nodejs

分类信息服务平台是在Android操作系统下的应用平台。为防止出现兼容性及稳定性问题,框架选择的是django,Android与后台服务端之间的数据存储主要通过MySQL。用户在使用应用时产生的数据通过 python等语言传递给数据库。通过此方式促进分类信息服务平台信…...

【蓝牙协议栈】【BLE】低功耗蓝牙配对绑定过程分析(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#xff01…...

MySQL表内容的增删查改

在前面几章的内容中我们学习了数据库的增删查改,表的增删查改,这一篇我们来学习一下对表中的内容做增删查改。 CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除) 1.创建Create 我们先创建…...

Java的三大特性之一——多态(完)

前言 http://t.csdnimg.cn/0CAuc 在上一篇我们已经详讲了继承特性,在这我们将进行最后一个也是最重要的特性讲解——多态 在讲解之前我们需要具备对向上转型以及方法重写的初步了解,这有助于我们对多态的认识 1.向上转型 即实际就是创建一个子类对象…...

算法-最短路径

图的最短路径问题是一个经典的计算机科学和运筹学问题,旨在找到图中两个顶点之间的最短路径。这种问题在多种场景中都有应用,如网络路由、地图导航等。 解决图的最短路径问题有多种算法,其中最著名的包括: 1.迪杰斯特拉算法 (1).…...

【软考---系统架构设计师】特殊的操作系统介绍

目录 一、嵌入式系统(EOS) (1)嵌入式系统的特点 (2)硬件抽象层 (3)嵌入式系统的开发设计 二、实时操作系统(RTOS) (1)实时性能…...

大模型: 提示词工程(prompt engineering)

文章目录 一、什么是提示词工程二、提示词应用1、提示技巧一:表达清晰2、提示词技巧2:设置角色 一、什么是提示词工程 提示词工程主要是用于优化与大模型交互的提示或查询操作,其目的在于能够更加准确的获取提问者想要获取的答案&#xff0c…...

RabbitMQ的事务机制

想要保证发送者一定能把消息发送给RabbitMQ,一种是通过Confirm机制,另一种就是通过事务机制。 RabbitMQ的事务机制,允许生产者将一组操作打包成一个原子事务单元,要么全部执行成功,要么全部失败。事务提供了一种确保消…...

41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】

目录 1. 物体检测 2. 边缘框实现 3.数据集 4. 小结 1. 物体检测 2. 边缘框实现 %matplotlib inline import torch from d2l import torch as d2ld2l.set_figsize() img d2l.plt.imread(../img/catdog.jpg) d2l.plt.imshow(img);#save def box_corner_to_center(boxes):&q…...

软件包管理(rpm+yum)

1.介绍软件包安装方式 rpm包安装: rpm是个软件包管理工具,通过.rpm后缀来操作 -i #安装 -q #查询 -l #列出软件包下的文件 -e #卸载 -h, #软件包安装的时候列出哈希标记 (和 -v 一起使用效果更好) -v, #提供更多的详细信息输出 rpm的痛点&#…...

网关层针对各微服务动态修改Ribbon路由策略

目录 一、介绍 二、常规的微服务设置路由算法方式 三、通过不懈努力,找到解决思路 四、验证 五、总结 一、介绍 最近,遇到这么一个需求: 1、需要在网关层(目前使用zuul)为某一个服务指定自定义算法IP Hash路由策…...

如何从零开始拆解uni-app开发的vue项目(二)

昨天书写了一篇如何从零开始uni-app开发的vue项目,今天准备写一篇处理界面元素动态加载的案例: 背景:有不同类别的设备,每个设备有每日检查项目、每周检查项目、每年检查项目,需要维保人员,根据不同设备和检查类别对检查项目进行处理,提交数据。 首先看一下界面: &l…...

【生成对抗网络GAN】一篇文章讲透~

目录 引言 一、生成对抗网络的基本原理 1 初始化生成器和判别器 2 训练判别器 3 训练生成器 4 交替训练 5 评估和调整 二、生成对抗网络的应用领域 1 图像生成与编辑 2 语音合成与音频处理 3 文本生成与对话系统 4 数据增强与隐私保护 三、代码事例 四、生成对抗…...

【设计模式】Java 设计模式之模板命令模式(Command)

命令模式(Command)的深入分析与实战解读 一、概述 命令模式是一种将请求封装为对象从而使你可用不同的请求把客户端与接受请求的对象解耦的模式。在命令模式中,命令对象使得发送者与接收者之间解耦,发送者通过命令对象来执行请求…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

数据库分批入库

今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...