八、Python —— 类、异常处理、模块、包的管理、虚拟环境

文章目录

  • 一、类
    • 1.1、类的定义
    • 1.2、类变量和实例变量
    • 1.3、类的继承
  • 二、异常处理
  • 三、模块 和 包
    • 3.1、模块和包的概念,以及项目的树形结构
    • 3.2、模块和包的使用 (from import)
      • 方法一:from 模块 import 变量/函数/类
      • 方式二:from 模块 import 变量名 as 其他变量名
      • 方式三:from 包.模块 import 变量/函数/类
      • 方式四:from 包 import 模块
      • 方式五:import 变量/函数/类
    • 3.3、import 和 from...import 的区别
    • 3.4、包的管理 (通过命令行)


一、类

可以将 变量、函数 打包 在一起,让代码在逻辑上更加清晰。
类名称 一般采用 驼峰命名法 (如 GetName)函数 一般采用 下划线命名法 (如 get_name)

函数第一个参数都是 self,用来 调用类本身的变量和函数 ()
调用 类中 函数 的时候,第一个 参数 self 不需要 自己传递,Python 会自动传递这个参数。

1.1、类的定义

 Python 中类的函数的写法是非常灵活的,一般来说不会报错,但是一般遵循一些约定俗成的规则:

  1. 每个函数中第一个参数都是 self
    self这个单词本身是可以随意改变的,但是一般就用 selfself 可以理解为指向这个类的空间,用来调用这个类本身的 变量和函数
  2. 调用变量的时候,不需要手动传递 self 参数
     从下面的代码中可以看出,在 创建 类中的函数时,是一定要将 形参 self 写出来的。但是在 调用 时,不用手动写 self 对应的实参,这是 python 自动实现的。
  3. python 中定义了很多以 下划线 开头的函数
     这里介绍两个最常用的:
函数名功能
__init__和其他语言中的 构造函数 是一样的,初始化 的时候会 自动调用
_str__用来定义 str(类名) 这个函数的效果的
class Hero:hero_count = 0  # 类变量def __init__(self, name, level=10):  # 构造函数self.name = nameself.level = levelprint("Hero %s has been created." % name)Hero.hero_count += 1def __str__(self):  # 定义str()函数的效果return "Hero: %s" % self.namedef greet(self):  # 问候print("%s: Hi!" % self.name)def move(self):  # 移动print("%s: Move!" % self.name)def get_level(self):  # 获取这个英雄的等级return self.leveldef next_level(self):return self.get_level() + 1  # 调用类中的其他函数

1.2、类变量和实例变量

每个类 可以创建 任意多实例。例如上面的 Hero ,可以创建 zeus 和 athena 等 实例 (等价于其他语言中的 对象)

类变量所有实例 共享 (类似于全局变量),一般 通过类名 访问,例如 Hero.hero_count
实例变量 与每个 具体的实例 绑定 (类似于局部变量),一般 通过具体实例 访问,例如 zeus.name

 对于如何 创建实例,如下所示,其遵循了一些规则:

  1. 在创建实例的时候,self是 Python 自动帮我们填的,不用手动写
  2. 在传输除了 self 之外的参数时,与 函数那一章形参的初始化方式 一样
  3. str(类) 是一样的效果,也就是说,当只写类名的时候,等于调用了 str 函数 (下面的代码中可以看到
  4. __str__ 函数的调用方式是 str(zeus),如果自己还定义了一个 str 函数,则调用方法应该是 zeus.str()
zeus = Hero("Zeus")
athena = Hero("Athena", 6)
zeus.greet()
athena.move()
print(zeus.name, athena.get_level(), athena.next_level())
print(str(zeus), athena)
print(Hero.hero_count, zeus.hero_count, athena.hero_count)
"""output
Hero Zeus has been created.
Hero Athena has been created.
Zeus: Hi!
Athena: Move!
Zeus 6 7
Hero: Zeus Hero: Athena
2 2 2"""

1.3、类的继承

子类 可以 继承 父类的变量和函数

self 可以调用 自身和父类 中的 变量和函数super() 可以调用 父类 中的 函数
 如果 子类和父类 的变量或函数 重名优先 使用 子类 的变量和函数。在调用某个类中的变量或函数的时候,基本过程就是 先看看该类中有没有,没有的话就看看父类中有没有

class Hero:hero_count = 0  # 类变量def __init__(self, name, level=10):  # 构造函数self.name = nameself.level = levelprint("Hero %s has been created." % name)Hero.hero_count += 1def __str__(self):  # 定义str()函数的效果return "Hero: %s" % self.namedef greet(self):  # 问候print("%s: Hi!" % self.name)def move(self):  # 移动print("%s: Move!" % self.name)def get_level(self):  # 获取这个英雄的等级return self.leveldef next_level(self):return self.get_level() + 1  # 调用类中的其他函数class Zeus(Hero):hero_name = "Zeus"def __init__(self, level):super().__init__(Zeus.hero_name, level)  # 通过 super() 调用父类的构造函数,如果这里用 self,# 则调用的 __init__ 是自己的,而不是父类的,# 可以试一下实参中的 Zeus.hero_name 可不可以换成 self.hero_name (答案是可以的)def greet(self):print("%s: Hi!(from child class)" % self.name)  # 使用的是父类的`name`class Athena(Hero):hero_name = "Athena"def __init__(self, level):super().__init__(Athena.hero_name, level)  # 通过super()调用父类的构造函数def greet(self):print("%s: Hi!(from child class)" % self.name)  # 使用的是父类的`name`

二、异常处理

 当某段代码 出现异常时,代码会被 终止。此时如果 不想让代码终止,可以用 try ... except ... 语句来 自己处理异常,并且执行异常语句之后的语句。

 例如,将字符串转化成整数时,可能会出现异常:

s = input()try:x = int(s)print(x)
except Exception as e:  # Exception 是一个通用的异常print(e)print("Finished!")
"""output
invalid literal for int() with base 10: 'as'
Finished!"""

 如果想要在异常的时候输出更加详细的内容,可以这样:

x, y = map(int, input().split())try:z = x / yprint(z)
except Exception as e:from traceback import print_excprint_exc()print("Finished!")
"""output
Traceback (most recent call last):File "E:\Jztop\PythonProject\for_learning\main.py", line 4, in <module>z = x / y
ZeroDivisionError: division by zero
Finished!"""

详细内容可以看别人的博客


三、模块 和 包

3.1、模块和包的概念,以及项目的树形结构

 一个 python 的文件 (.py) 就叫做 模块 (module),如 xxx.py。模块 就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。
 一个包含有 init.py 文件的 目录或文件夹 就叫做 包 (package)。在 pycharm 中选择 python package 创建的目录就是一个包。

 当项目的逻辑越来越复杂时,把所有代码写到 一个文件 中会相当不方便。此时就可以将不同代码放到 不同的模块 中。所有模块通过 文件夹和文件 组织成 的形式。

 自定义模块的 每个文件夹中 需要包含一个 __init__.py 文件,用来让 Python 识别出这是一个包。示例:
在这里插入图片描述
 将项目进行模块化拆分,其 好处 包括:

  1. 使得整个项目的逻辑更加清晰,方便很多人一起开发,以及对项目进行增删查改;
  2. 方便模块之间进行相互调用

3.2、模块和包的使用 (from import)

 假设某项目结构如下图所示,现在需要在 main.py 下调用模块文件中的 变量、函数 等。
在这里插入图片描述
module1.py 中的代码:

name = "miyazaki"def greet():print("%s says: hello world!" % name)

module2.py中的代码:

age = 18class Speak:def __init__(self, age1 = 20):self.age1 = age1def speak_chinese(self):print("我今年 %d 岁" % self.age1)

方法一:from 模块 import 变量/函数/类

 格式:from module import var,func,cls

 注意:导入 模块名当前的 py 文件 必须在 同一级目录

 例如:实现在 main.py 中调用 module2 模块中的内容

from module2 import age, Speakprint(age)man = Speak()
man.speak_chinese()
"""output
18
我今年 20 岁"""

方式二:from 模块 import 变量名 as 其他变量名

 格式:from module import var as other_var

 例如: 要求 main.py 中存在有与 module2 相同的变量名,要求同时使用 2 个变量名

from module2 import age as m2_ageage = 20print(age, m2_age)
"""output
20 18"""

方式三:from 包.模块 import 变量/函数/类

 格式:from pkg.module import var,func,cls

 例如:实现在 main.py 中调用 module1 模块中的内容

from dir.module1 import name, greetprint(name)
greet()
"""output
miyazaki
miyazaki says: hello world!"""

方式四:from 包 import 模块

 格式:from pkg import module

 注意:调用 模块 中的 变量、函数和类名 时,要用 模块名.变量 或者 模块名.函数 或者 模块名.类名 的方式来调用

 例如:实现在 main.py 中调用 module1 模块中的内容

from dir import module1print(module1.name)
module1.greet()
"""output
miyazaki
miyazaki says: hello world!"""

方式五:import 变量/函数/类

 格式:import var,func,cls

 注意:python 的 内置模块 可以使用这种方式,也可以用 from module import var,func,cls 方式来进行代替

 例如:实现在 main.py 中调用 内置模块 time 中的内容

import time
time.sleep(2)from time import sleep
sleep(2)

3.3、import 和 from…import 的区别

importfrom import 都是用来 引入其他模块或包 的关键字。它们之间的区别在于 引入的方式作用范围

  1. import:使用 import 关键字可以 引入 整个模块或包,并且在 使用 其中的 函数、类或变量需要 通过模块名来访问。例如:import module_name,然后使用 module_name.function_name() 来访问模块中的函数。
  2. from import:使用 from import 关键字可以从模块或包中直接 引入 特定的函数、类或变量,而 不需要 通过模块名来访问。例如:from module_name import function_name,然后直接使用 function_name() 来访问函数。

推荐使用:import 模块名,然后再 模块名.xxx来调用的形式。from xxx import * 这种写法,会给你带来无穷无尽的噩梦。

3.4、包的管理 (通过命令行)

 写项目时,不会所有代码都自己实现,会用到很多网络上现成的 包 (模块)
 以安装 pygame 这个包为例:

  • 安装包:pip3 install pygame --user
  • 升级包:pip3 install pygame --user --upgrade
  • 删除包:pip3 uninstall pygame

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

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

相关文章

【text2sql】低资源场景下Text2SQL方法

SFT使模型能够遵循输入指令并根据预定义模板进行思考和响应。如上图&#xff0c;、 和 是用于通知模型在推理过程中响应角色的角色标签。 后面的内容表示模型需要遵循的指令&#xff0c;而 后面的内容传达了当前用户对模型的需求。 后面的内容代表模型的预期输出&#xff0c;也…

自适应神经网络架构:原理解析与代码示例

个人主页&#xff1a;chian-ocean 文章专栏 自适应神经网络结构&#xff1a;深入探讨与代码实现 1. 引言 随着深度学习的不断发展&#xff0c;传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方&#xff0c;提供了small&#xff0c;medium&#xff0c;large三种大小。可以删除图片&#xff0c;也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…

基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

如何使用apache部署若依前后端分离项目

本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…

标贝科技受邀出席2024东湖国际人工智能高峰论坛并入选数据要素合作伙伴名单

近日&#xff0c;备受瞩目的2024东湖国际人工智能高峰论坛在中国光谷科技会展中心隆重召开。会议以“智联世界&#xff0c;共创未来”为主题&#xff0c;省市相关单位、专家学者、产学研各界百余家联合体单位齐聚一堂&#xff0c;共话人工智能领域的最新技术及产业发展趋势。会…

QGIS Python插件开发环境搭建--QGIS3.34.11+PyCharm

QGIS Python插件开发环境搭建--QGIS3.34.11PyCharm 安装QGIS启动QGIS并设置为中文启动QGIS Python插件开发中用到的插件安装PyCharm社区版使用Plugin Builder 3生成插件模板加载插件打开QGIS插件路径将自己的插件拷贝到QGIS的python插件路径 使用PyCharm打开插件代码配置Python…

On-Chip-Network之router微架构的物理实现

Low-Power Microarchitecture 自20世纪90年代以来&#xff0c;功耗一直是嵌入式芯片和高性能芯片面临的一个挑战。自2000年代中期以来&#xff0c;它已经成为大多数设计的主要约束。多核解决了功耗问题&#xff0c;由此产生的communication substrate&#xff0c;namely the on…

java 21 多线程

1.相关概念 进程: 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存空间。当我们使用迅雷&#xff0c;又启动了一个进程&#xff0c;操作系统将为迅雷配新的内存空间。 进程是程序的一次执行过程&#…

Envoy-istio

最近研究envoy-istio&#xff0c;发现这个博客&#xff0c;觉得很不错&#xff0c;这里记录一下 envoy-istio介绍 envoy-istio - 随笔分类 - yaowx - 博客园 envoy部分七&#xff1a;envoy的http流量管理基础 envoy部分六&#xff1a;envoy的集群管理 envoy部分五&#xff…

【ETCD】ETCD用户密码认证

目录 概述 特殊用户和角色 root用户 root角色 用户操作 角色操作 启用身份验证 使用etcdctl进行身份验证 使用TLS通用名称 概述 etcd 2.1中增加了身份验证功能。etcd v3 API对身份验证功能的API和用户界面进行了轻微修改&#xff0c;以更好地适应新的数据模型。本指南…

蓝牙定位的MATLAB程序,四个锚点、三维空间

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念&#xff0c;并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…

【计算机网络】实验4:生成树协议STP的功能以及虚拟局域网VLAN

实验 4&#xff1a;生成树协议STP的功能以及虚拟局域网VLAN 一、 实验目的 加深对生成树协议STP的功能的理解。 了解虚拟局域网VLAN。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、验证交换机生成树协议STP的功能 (1) 第一步&#xff1a;构建网络拓…

VMware官网下载

访问官网 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 跳转到broadcom 注册 -> 登录 拉到下面 选择版本 然后填写地址信息&#xff0c; 随便写写&#xff0c; 再回去点下载按钮&#xff0c; 就可以下载了

智慧地图聚合(LockMap)标注系统开发说明文档

智慧地图聚合(LockMap)标注系统开发说明文档 1. 系统概述 智慧地图聚合(LockMap)标注系统是一个专为处理大规模地理信息数据而设计的综合解决方案。通过后端高效的数据管理和前端直观的地图展示&#xff0c;该系统能够实现对海量地理位置点的有效可视化。本项目旨在提供一个用…

【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数

1. UDF函数&#xff08;用户自定义函数&#xff09; 一般指的是用户自己定义的单行函数。一进一出&#xff0c;函数接受的是一行中的一个或者多个字段值&#xff0c;返回一个值。比如MySQL中的&#xff0c;日期相关的dateDiff函数&#xff0c;字符串相关的substring函数。 先…

linux 服务器 一次性查看 CPU、内存和磁盘使用情况

创建 vi check_usage.sh #!/bin/bashecho " CPU 使用率 " mpstat -P ALL 1 1echo -e "\n 内存使用情况 " free -hecho -e "\n 磁盘使用率 " df -h执行授权 chmod x check_usage.sh执行查看 ./check_usage.sh这样可以快速获取系统资源的概览。…

一文理解多模态大语言模型——下

作者&#xff1a;Sebastian Raschka 博士&#xff0c; 翻译&#xff1a;张晶&#xff0c;Linux Fundation APAC Open Source Evangelist 编者按&#xff1a;本文并不是逐字逐句翻译&#xff0c;而是以更有利于中文读者理解的目标&#xff0c;做了删减、重构和意译&#xff0c…

数据结构---链表(2)---双向链表

链表(1)中讲过了在OJ题中出现很多并且能作为一些复杂数据结构子结构的不带头单向不循环链表&#xff0c;下面讲解应用很广很实用的带头双向循环链表。 三、双向链表---DoublyLinkedList 演示带头双向循环链表(实用)。 带头--->不需要对空链表继续单独判断&#xff1b;循环…

PH热榜 | 2024-12-04

1. Stackfix 标语&#xff1a;几秒钟内就能对比软件。 介绍&#xff1a;立刻就能对比不同软件的价格和功能。不用再费力看各种评测或接推销电话了。我们提供实时价格、并排对比&#xff0c;还有专家的推荐建议。 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; V…