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.mzph.cn/pingmian/58383.shtml

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

相关文章

Linux系统用户操作以及权限管理

用户账号 用户账号:linux系统当中用户的角色,以及用户所拥有的权限 超级管理员:root roottest1:~# 命令含义root表示当前的登录用户test1当前主机名~当前目录#表示当前用户时管理员$表示当前用户是普通用户 exit:…

全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验

在.NET 2025.1版本中,我们带来了巨大的期待功能,进一步简化了报告模板的开发过程。新功能包括通过添加链接报告页面、异步报告准备、HTML段落旋转、代码文本编辑器中的文本搜索、WebReport图像导出等,大幅提升用户体验。 FastReport .NET 是…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

Docker:容器化和虚拟化

虚拟化 虚拟化是一种资源管理技术,它将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源的架设方式、地域或…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜(‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’)…

mybatis数据映射(记录踩坑点)

刚开始,userInfo里面的id我默认以为是User表的id,但是后面稍微看了一下返回的数据,userId跟replyId一致,我就知道userInfo里的id指的是Reply的id(应该是命名冲突,先查Reply有没有id,没有&#x…

【C++笔记】内存管理

前言 各位读者朋友们大家好,上期我们讲了类和对象下的内容,类和对象整体的内容我们就讲完了,接下来我们开启新的部分内存管理的讲解。 目录 前言一. C/C内存分布二. C语言中内存管理的方式三. C内存管理方式3.1 new/delete操作内置类型3.2…

《计算机原理与系统结构》学习系列——处理器(中)

系列文章目录 目录 流水线数据通路与控制概述5个流水级指令周期与流水级 流水线性能流水线时钟周期的长度T和数量cycles流水线性能 流水线数据通路流水线寄存器流水线分析图形化流水线流水线控制 流水线数据通路与控制 概述 5个流水级 指令周期与流水级 单周期实现中&#x…

鸿蒙网络编程系列40-TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的验签是网络编程中一个重要的功能,它保证了数字证书的真实性,在此基础上,我们才可以信任该证书,从而信任基于该证书建立的安全通道,所以说,数字证书的验签是通讯安全的基…

路虎裁员,又玩出了新花样。。

大家好,我是程序员面试刷题平台的鸭鸭! 最近裁员的新闻已经不少见了,但鸭鸭没想到,公司裁员的花样真是越来越多了。 最近流言中裁员比例超过 50% 的捷豹路虎,听说就专门为裁员开辟了一个快速离职专区:前一…

【Linux】使用<信号量>实现<线程互斥>(思维导图&代码演示&思路解析)

前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

【A股小探-01】股指期货交割日对股指的影响

本文来源于量化小论坛策略分享会板块精华帖,作者为刘世宇,发布于2024年5月3日。 以下为精华帖正文: 01 引言 自踏入 A 股市场以来,笔者注意到了众多所谓的“效应”与“魔咒”,例如黑周四、黑四月、财报季魔咒、节前效…

ios 快捷指令扩展(Intents Extension)简单使用 swift语言

本文介绍使用Xcode15 建立快捷指令的Extension,并描述如何修改快捷指令的IntentHandler,带参数跳转主应用;以及展示多个选项的快捷指令弹框(配置intentdefinition文件),点击选项带参数跳到主应用的方法 创建快捷指令 快捷指令是…

技术干货|如何巧妙利用数字孪生技术助力口腔保健分析

行业: 口腔医疗 挑战: 传统方法缺乏预测口腔内受力状态,也很难从患者方面获得反馈,因此将口腔扫描、牙齿形状/位置识别和正畸数字模型生成的过程数字化是一个重大机会。 正畸治疗是牙科中最大的类别之一,随着病例的…

星巴克们需要找回节奏

“重返星巴克”需要更多运气。 作者|金豫 编辑|杨舟 国内咖啡市场正上演着一场后浪推前浪的经典剧目。 近期,“太平洋咖啡”传出大规模关店的消息。该品牌在多座城市中仅剩下几家门店,且多数集中在机场。而在2016年前后,太平洋咖啡一度超越…

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程:从入门到进阶 引言 在现代前端开发中,React 作为一款流行的 JavaScript 库,以其组件化、声明式的特性和强大的生态系统,成为了开发者的首选。无论是构建单页应用(SPA)还是复杂的用…

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂面试真题W3,W10

1. 牛客大厂面试真题SQLW3:分析客户逾期情况 1.1 题目: 描述 有贷款信息表:loan_tb(agreement_id:合同id,customer_id:客户id,loan_amount:贷款金额,pay_a…

在 Windows 中使用 GCC 编译运行 C++

在 Windows 中使用 GCC 编译开发 C 通过 MSYS2 安装 MinGW 工具链 MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于 Linux 的shell环境,可以在 Windows 系统中编译和运行许多 Linux 应…

铝基板PCB创建助手

支持在创建元件时创建网表 支持圆形和矩形阵列布局 支持板框信息修改 支持缺口位置修改 支持元件封装预览 支持原理图预览 支持PCB板框和布局预览 支持灯珠方向更改为切向和径向 支持报告输出 支持元件封装选择 铝基板PCB创建助手 V1.0

如何理解全局和局部的规律

再和大家聊的话题是全局和局部的辩证关系。 研究全局和局部的辩证关系,研究的就是做事的方法。 不过这里说的做事的方法不是具体的执行办法,比如这一步应该怎么做,那一步应该怎么做。 而是重在思考,应该先做什么,后…