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,一经查实,立即删除!

相关文章

通信原理概论复习笔记(2):模拟调制与数字调制

5 模拟调制系统 调制: 将消息信号搭载(边带)到载波参数上(调幅; 调频; 调相); 边带滤波器 h ( t ) ↔ H ( ω ) h(t)\leftrightarrow H(\omega) h(t)↔H(ω). 载波: 高频周期性震荡信号; c ( t ) A cos ⁡ ( ω c t φ ) c(t)A\cos(\omega_c t\varphi) c(t)Acos(ωc​tφ)…

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% 的捷豹路虎,听说就专门为裁员开辟了一个快速离职专区:前一…

C#运算符与表达式详解

在C#编程中,运算符和表达式是构建复杂逻辑和处理数据的关键元素。以下是对C#运算符与表达式的详细解析: 一、运算符 运算符是一种特殊的符号,用于执行各种数学、逻辑和其他操作。C#中的运算符可以分为以下几类: 算术运算符&…

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

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

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

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

K8S nginx pod结合cronJob实现日志按天切割 —— 筑梦之路

前言 nginx的官方镜像都是把日志重定向到标准输出,如果没有特别需求,已经能满足大多数的使用。 这里我主要对官方镜像进行改造,添加logrotate,结合cronJob来实现nginx日志的自动轮转,以方便排查故障问题。 编写Dock…

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

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

GPT论文整理提示词

论文阅读 指令1:粗读论文 请你阅读并理解这篇文献,然后将该篇文章的标题作为一级标题,将摘要和各个大标题作为二级标题,将小标题作为三级标题,将小标题下每一部分内容作为四级标题,给我以markdown的语言输出中文的翻…

【回溯算法】(第七篇)

目录 ⼦集(medium) 题目解析 讲解算法原理 编写代码 找出所有⼦集的异或总和再求和(easy) 题目解析 讲解算法原理 编写代码 ⼦集(medium) 题目解析 1.题目链接:. - 力扣(Le…

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

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

ubuntu 挂载 新 硬盘 ext3

ubuntu 挂载 新 硬盘 在Ubuntu中使用新的硬盘并格式化为ext3文件系统,你需要执行以下步骤: 插入硬盘并确认系统已识别。 确定硬盘的设备名称,例如 /dev/sdb。 使用mkfs.ext3命令格式化硬盘为ext3文件系统。 以下是具体的命令&#xff1a…