python 模块和包、类和对象

模块

模块是包含 Python 代码的文件,通常用于组织相关的函数、类和其他语句。模块可以被导入并在其他 Python 文件中使用。

创建模块

假设你创建了一个名为 mymodule.py 的文件,内容如下:

# mymodule.pydef greet(name):    return f"你好, {name}!"class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁。"

导入模块

在另一个 Python 文件中,你可以这样导入并使用这个模块:​​​​​​​

import mymodule# 使用模块中的函数print(mymodule.greet("Alice"))  # 输出: 你好, Alice!# 使用模块中的类person = mymodule.Person("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

从模块中导入特定对象

你也可以只导入模块中的特定函数或类:​​​​​​​

from mymodule import greet, Personprint(greet("Alice"))  # 输出: 你好, Alice!person = Person("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

别名

你可以为导入的模块或对象指定别名:​​​​​​​

import mymodule as mmprint(mm.greet("Alice"))  # 输出: 你好, Alice!from mymodule import Person as Pperson = P("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

包是一个包含多个模块的目录,并且该目录下有一个特殊的 __init__.py 文件。__init__.py 可以为空,但它的存在表示该目录是一个包。

创建包

假设你创建了一个名为 mypackage 的目录,结构如下:​​​​​​​

mypackage/    __init__.py    module1.py    module2.pymodule1.py 内容:# module1.pydef func1():    return "这是来自 module1"module2.py 内容:# module2.pydef func2():    return "这是来自 module2"__init__.py 可以为空,或者可以用来初始化包的内容:# __init__.pyfrom .module1 import func1from .module2 import func2

导入包

在另一个 Python 文件中,你可以这样导入并使用这个包:​​​​​​​

import mypackageprint(mypackage.func1())  # 输出: 这是来自 module1print(mypackage.func2())  # 输出: 这是来自 module2

从包中导入模块

你也可以直接从包中导入模块:​​​​​​​

from mypackage import module1, module2print(module1.func1())  # 输出: 这是来自 module1print(module2.func2())  # 输出: 这是来自 module2

类和对象

类 (Classes)

类是一种用户定义的数据类型,它封装了数据(属性)和方法(行为)。类是面向对象编程的基础。

定义类

class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁。"    def get_age(self):        return self.age    def set_age(self, new_age):        if new_age > 0:            self.age = new_age        else:            print("年龄必须是正数。")

创建对象​​​​​​​

person1 = Person("Alice", 30)print(person1.introduce())  # 输出: 我的名字是 Alice,我今年 30 岁。person2 = Person("Bob", 25)print(person2.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

访问属性和方法​​​​​​​

print(person1.name)  # 输出: Aliceprint(person1.get_age())  # 输出: 30person1.set_age(35)print(person1.get_age())  # 输出: 35person1.set_age(-10)  # 输出: 年龄必须是正数。

继承

继承允许一个类继承另一个类的属性和方法。

定义子类​​​​​​​

class Student(Person):    def __init__(self, name, age, student_id):        super().__init__(name, age)        self.student_id = student_id    def study(self):        return f"{self.name} 正在学习。"    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁,我的学号是 {self.student_id}。"

创建子类对象​​​​​​​

student1 = Student("Charlie", 20, "S12345")print(student1.introduce())  # 输出: 我的名字是 Charlie,我今年 20 岁,我的学号是 S12345。print(student1.study())  # 输出: Charlie 正在学习。

多态 (Polymorphism)

多态允许不同类的对象通过相同的接口进行调用,表现出不同的行为。

示例

class Teacher(Person):    def __init__(self, name, age, subject):        super().__init__(name, age)        self.subject = subject    def teach(self):        return f"{self.name} 正在教 {self.subject}。"    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁,我教 {self.subject}。"def introduce_person(person):    print(person.introduce())# 创建不同类型的对象person1 = Person("Alice", 30)student1 = Student("Charlie", 20, "S12345")teacher1 = Teacher("David", 40, "数学")# 调用相同的方法,表现出不同的行为introduce_person(person1)  # 输出: 我的名字是 Alice,我今年 30 岁。introduce_person(student1)  # 输出: 我的名字是 Charlie,我今年 20 岁,我的学号是 S12345。introduce_person(teacher1)  # 输出: 我的名字是 David,我今年 40 岁,我教 数学。

总结

模块 是包含相关功能的 Python 文件。

包 是包含多个模块的目录,通常用于组织大型项目。

类 是一种用户定义的数据类型,封装了数据和方法。

对象 是类的实例。

继承 允许一个类继承另一个类的属性和方法。

多态 允许不同类的对象通过相同的接口进行调用,表现出不同的行为。

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

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

相关文章

图书管理系统汇报

【1A536】图书管理系统汇报 项目介绍1.用户登录注册功能1. 1用户角色管理2.图书管理功能2.1 添加图书2.2 编辑图书2.3 删除图书 3.图书搜索和筛选3.1 图书搜索3.2 图书筛选 4.图书借阅、图书归还4.1 图书借阅4.2 图书归还 5.用户信息管理5.1上传头像5.2修改头像5.3 修改密码 项…

执行Django项目的数据库迁移命令时报错:(1050, “Table ‘django_session‘ already exists“);如何破?

一、问题描述: 当我们写Django时,由于自己的操作不当,导致执行数据库迁移命令时报错,报错的种类有很多,例如: 迁移文件冲突:可能你有多个迁移文件试图创建同一个表。数据库状态与迁移文件不同…

蓝牙BLE开发——红米手机无法搜索蓝牙设备?

解决 红米手机,无法搜索附近蓝牙设备 具体型号当时忘记查看了,如果你遇到有以下选项,记得打开~ 设置权限

java设计模式之创建者模式(5种)

设计模式 软件设计模式,又称为设计模式,是一套被反复利用,代码设计经验的总结,他是在软件设计过程中的一些不断发生的问题,以及该问题的解决方案。 **创建者模式又分为以下五个模式:**用来描述怎么“将对象…

SpringSecurity框架(入门)

简介: Spring Security 是一个用于构建安全的 Java 应用程序的框架,尤其适用于基于Spring的应用程序。它提供了全面的安全控制,从认证(Authentication)到授权(Authorization),以及…

广东网站设计提升你网站在搜索引擎中的排名

在当今网络盛行的时代,拥有一个设计优良的网站,对企业的在线发展至关重要。特别是对于广东地区的企业来说,网站设计不仅仅是美观的问题,更直接影响着搜索引擎中的排名。因此,精心策划和设计的网站,能够显著…

Cuebric:用AI重新定义3D创作的未来

一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…

计算机的错误计算(一百四十)

摘要 探讨 MATLAB 中函数 的计算精度。 从计算机的错误计算(一百三十九)知,对于对数运算,当真数在 1 附近时,计算机的输出会出现较大误差。为此,IEEE 754-2019 中专门定义有函数 其目的就是当自变量在 …

《Python游戏编程入门》注-第4章2

《Python游戏编程入门》的“4.2.2 键盘事件”中介绍了通过键盘事件来监听键盘按键的方法。 1 键盘事件 玩家点击键盘中某个按键实际上包含了两个动作:点击按键和释放按键,也就是按键按下和松开。按键按下的对应的事件是KEYDOWN,按键松开对应…

《高频电子线路》 —— 高频谐振功放(2)

动态特性与负载特性 动态特性 静态特性是指,不考虑负载阻抗的时候获得的,即转移特性曲线和输出特性曲线。 考虑负载时,电流变化的时候,负载上的电压就会变化,管子上面的Vce也会变化。 考虑负载的反作用后&#xff0c…

SpringBoot 下的Excel文件损坏与内容乱码问题

序言 随着打包部署的方式的改变,原本正常运行的代码可能带来一些新的问题,比如我们现在使用SpringBoot 的方式生成Jar包直接运行,就会对我们再在Resource下的Excel文件产生影响,导入与预期不符的情况发生cuiyaonan2000163.com 比…

「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用

在鸿蒙应用开发中,Image 组件用于加载和显示图片资源,并提供多种属性来控制图片的显示效果和适配方式。本篇将带你学习如何在鸿蒙应用中加载本地和远程图片、设置图片样式以及实现简单的图片轮播功能。 关键词 Image 组件图片加载本地资源远程图片图片轮播一、Image 组件基础…

上海亚商投顾:沪指缩量调整 华为概念股午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整,沪指、深成指午后跌超1%,创业板指一度跌逾2%,尾盘跌幅有…

vim命令及shell命令

目录 vim命令 vim三种工作模式 光标的跳转 复制粘贴 剪切删除 撤销回滚替换 翻页 其他 shell编程命令 判断用户的参数 可用的整数比较运算符 常见的字符串比较运算符 if条件测试语句 for条件循环语句 vim命令 vim三种工作模式 Vim编辑器中设置了三种模式: 命令…

Z 检验和 T 检验之间的区别

目录 一、说明 二、什么是假设检验? 三、假设检验基础 3.1 假设检验的基本概念 3.2 、执行假设验证的步骤 3.3 临界值、P 值 3.4 方向假设 3.5 非方向假设检验s 四、什么是 Z 检验统计量? 五、Z 检验示例 5.1 单样本 Z 检验 5.2 双样本 Z 检…

Qt限制QGraphicsScene QGraphicsItem内部的移动范围

用过QGraphicsView的都知道,原点一般设定在view和item的中心,所以帮助文档和这个网友说的不一定跟我们对的上: 关于Qt限制QGraphicsScene内部Item的移动范围_qgraphicsitem限制移动范围-CSDN博客 首先,设定view的scenerect&…

【Redis】浅析Redis大Key

目录 1、什么是Redis大Key 2、大 Key 是怎么产生的 3、大 Key 导致的问题 4、如何快速找到 Redis 大 Key 5、大 Key 优化策略 6、总结 我们在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能…

Jedis操作和springboot整合redis

Jedis-springboot整合redis Jedis 引入jedis依赖 注意事项 测试相关数据类型 Key String List set hash zset 案例 spring boot整合redis 引入相关依赖 在application.properties中配置redis 配置 创建redis配置类 创建测试类 Jedis 引入jedis依赖 <depen…

GenAI 生态系统现状:不止大语言模型和向量数据库

自 20 个月前 ChatGPT 革命性的推出以来&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;领域经历了显著的发展和创新。最初&#xff0c;大语言模型&#xff08;LLMs&#xff09;和向量数据库吸引了最多的关注。然而&#xff0c;GenAI 生态系统远不止这两个部分&#…

HTML、JavaScript和CSS实现注册页面设计

目录 一、实现要求 二、实现页面图 1、注册页面 2.用户ID、用户名、口令验证成功后显示页面 三、用户ID、用户名、口令、确定口令验证逻辑js代码 1、验证用户ID 2、验证用户名 3、验证口令密码 四、总结 五、代码仓库 一、实现要求 综合使用HTML、JavaScript和CSS进…