iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python面向对象之模块和包
  • 384
分享到

Python面向对象之模块和包

面向对象模块Python 2023-01-31 00:01:22 384人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

模块 模块的概念 模块是python程序架构的一个核心概念 所有以.py结尾的源文件都是一个模块; 模块名也是标识符,需要遵循标识符的命名规则; 在模块中定义的全局变量,类,函数,都是直接给外界使用的工具; 模块就好比一个工具包,而

模块

模块的概念

模块是python程序架构的一个核心概念

  • 所有以.py结尾的源文件都是一个模块;
  • 模块名也是标识符,需要遵循标识符的命名规则;
  • 在模块中定义的全局变量,类,函数,都是直接给外界使用的工具
  • 模块就好比一个工具包,而里面的函数和变量就是工具,要想使用模块,先导入;

模块的两种导入方式

方式1:import 导入

导入方式如下:

import 模块名1,模块名2

在pep8中建议,每次导入的模块应该独占一行
即:

import 模块名1
import 模块名2

导入之后。通过 模块名. 调用模块中的全局变量,函数,类

使用as指定模块的别名
如果模块的名字太长,可以使用as指定模块的名称,以便在代码中的使用;语法如下:

import 模块名1 as 模块别名

注意,模块别名应该符合大驼峰命名法

示例:

import game_show_help as help
import game_start_play as play
# 后面的代码只需要将模块名替换一下即可

方式2:from... import xx

  • 如果希望从某一模块中,导入部分工具,就可以使用 from ... import的方式;
  • import 模块名 是一次性将模块中的所有工具导入,并且通过 模块名/别名 访问;

导入部分工具语法如下:

# 从 某模块 导入 某工具
from 模块名1 import 工具名

导入之后,不再需要通过 模块名. 使用工具,可以直接使用模块提供的工具--类,函数,全局变量;

from ... import *(了解)

# 从模块 导入所有工具
from 模块名1 import *

这种方式不推荐使用,因为函数重名时并没有任何提示,出现问题不好排查。

导入同名函数

注意:如果两个模块,存在同名的函数,后导入的函数,会覆盖先导入的函数
和这个类似的是类的继承,但顺序不同,优先使用先继承的类中的方法;

  • 开发import代码应该统一写在代码顶部,更容易及时发现冲突;
  • 一旦发现冲突,可以使用as关键字给其中一个同名工具起别名

模块搜索顺序

Python解释器在导入模块时,会:

  1. 搜索当前目录指定模块名的文件,如果有则直接导入;
  2. 如果没有,再搜索系统目录;

在开发时,给文件起名,不要和系统的模块文件重名
可以使用模块的内置属性 **模块名.__file__ 可以查看模块的文件路径**;

如果当前目录下存在一个和系统的模块文件重名的文件,会优先调用当前目录文件,从而引起错误;

开发原则及导入模块问题

开发原则

开发原则--每一个文件都应该是可以被导入的

  • 一个独立的python文件就是一个模块;
  • 在导入模块时,模块文件中所有没有任何缩进的代码都会被执行一遍;

实际开发场景

在实际开发中,每一个模块都是独立开发的,大多都有专人负责;
开发人员通常在模块下方增加一些测试代码; 仅在模块内使用,而被导入到其他文件不需要执行;

导入模块存在问题

当我们导入一个文件时,文件中所有未缩进的代码都会被执行一遍,比如print或者调用函数等,而这并不是我们希望看到的;

例如,以下是两个文件:

cp_06test1.py

def say_hello():
    print("hello python")


print("test1")

say_hello()

cp_07use_test.py

import cp_06test1


print("-"*50)

# test1
# hello python
# --------------------------------------------------

我们可以看到,在第二个文件中,只导入并且随意输出一个字符;在导入时首先会将第一个文件的代码执行一遍,再执行第二个文件中的内容。

用__name__属性解决测试和调用问题 ####
__name__属性,可以做到,测试模块的代码只在测试情况下被运行,而在被导入时不会被执行;

__name__是python中的一个内置属性,记录着一个字符串

如果是被其他文件导入的,__name__就是模块名;
如果是当前执行的程序,__name__就是__main__;

我们可以根据这个特性来给测试代码添加缩进,这样,在本地代码就可以只在本地执行被执行,而在被导入时不会被执行;

使用__name__解决示例如下:

cp_06test1.py

def say_hello():
    print("hello python")


# 判断是否是在本函数执行,如果是在本函数执行,就执行以下代码
# 如果是被其他文件的函数调用,则略过下列代码
if __name__ == "__main__":
    print(__name__)  # __main__

    print("test1")

    say_hello()

cp_07use_test.py

import cp_06test1


# 未使用__name__前,在调用test1时,输出的__name__为 cp_06test1

print("-"*50)

cp_06test1.say_hello()

# --------------------------------------------------
# hello python

包的概念和创建使用

包概念

  • 包是一个包含多个模块的特殊目录;
  • 目录下有一个特殊的文件 init.py 文件;
  • 包名的命名方式和变量名一致,字母数字下划线,但不能以数字开头;
  • 作用:使用 import 包名 可以一次性导入包中的所有模块;

init.py

要在外界使用包中的模块,需要在 init.py 中指定对外界提供的模块列表
__init__中的内容可能如下:

from . import 模块名1
from . import 模块名2

包的建立方式

通用:

先新建一个文件,命名应该符合包;
然后在文件下建立__init__.py文件,就是包了;

PyCharm下:

右键,python packge,输入包名,IDE自动创建包。

包的使用演练

message包下有:init.py;send_message.py;receive_message.py。

send_message.py内容

def send(mess):
    print("发送消息 %s" % mess)

receive_message.py内容

def receive():
    print("收到消息")

init.py内容

from . import send_message
from . import receive_message

包外文件:
use_packge.py内容

import message

message.send_message.send("xiaoxi")
message.receive_message.receive()

# 发送消息 xiaoxi
# 收到消息

自制第三方模块及安装卸载

制作模块压缩包

linux

1.创建 setup.py
在准备好的模块文件的统计目录,创建setup.py文件;
setup.py和要发布的模块文件同级目录,不是下级;

setup.py内容:

from distutils.core import setup

setup(
    name='xxx',  # 包名
    version='1.0.0',  # 版本
    author='xxx',  # 作者
    author_email='xxx@163.com',  # 作者邮箱
    url='xxx.com',  # 网址/主页
    description='这是我的第一个发布安装文件'  # 描述信息
    py_moudles=["包名.模块名1", "包名.模块名2"]
)

2.构建模块

python3 setup.py build

3.生成发布压缩包

python3 setup.py sdist

可以将制作好的模块压缩包直接发送给别人,按照后面学习的 安装包 内容解压缩安装即可;
但如果需要将包上传到网上供别人的话,可以自行百度(也可以上传到GitHub上)。

安装模块压缩包

tar -zxvf message-1.0.tar.gz
sudo python setup.py install

卸载模块

可以使用 message.__file__ 查看完整文件目录,以便删除;

卸载模块
直接从安装目录下,把安装模块的目录删除就可以了;

cd usr/local/lib/python3.5/dist-packages/
sudo rm -r message*

pip安装第三方模块

  • 第三方模块通常是指 由知名的第三方团队开发的 并且被python程序员广泛使用的包/模块;
  • pip是一个现代的,通用的python包管理工具;
  • 提供了对python包的查找,下载,安装,卸载等功能;

安装和卸载命令如下:

sudo pip install pygame
sudo pip uninstall pygame

pip安装卸载演示

# 将模块安装到python3.x环境下
sudo pip3 install pygame
sudo pip3 uninstall pygame

--结束END--

本文标题: Python面向对象之模块和包

本文链接: https://www.lsjlt.com/news/182258.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python面向对象之模块和包
    模块 模块的概念 模块是Python程序架构的一个核心概念 所有以.py结尾的源文件都是一个模块; 模块名也是标识符,需要遵循标识符的命名规则; 在模块中定义的全局变量,类,函数,都是直接给外界使用的工具; 模块就好比一个工具包,而...
    99+
    2023-01-31
    面向对象 模块 Python
  • Python面向对象之模块详解
    目录1.1 导入模块1.1.1 import 模块名1.1.2 from 模块名 import 功能名1.1.3 from …import*1.1.4 as 定义别名1.2 制作模块...
    99+
    2022-11-12
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2022-11-12
  • Python面向对象之入门类和对象
    目录什么是面向对象编程?定义类,从具体代码来感受吧!多个类和对象的观察补充一下类的属性(数据部分)总结什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了。 ...
    99+
    2022-11-12
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • Python入门之面向对象和类
    目录一、两大编程思想二、类与对象三、定义Python中的类四、对象创建五、类属性、类方法、静态方法六、动态绑定属性和方法七、面向对象的三大特征八、方法重写总结一、两大编程思想 二、...
    99+
    2022-11-12
  • python 面向对象之class和封装
    # 封装 # Python并没有真正的私有化支持,但可用下划线得到伪私有 访问私有变量:实例._类名__变量名 访问私有方法:实例._类名__方法名() class Wife02(...
    99+
    2022-11-12
  • 面向对象之套接字(socket)和黏包
      tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端   基于UDP协议的socket   server端: import socket udp_sk = socket.socket(type=socket.SOCK...
    99+
    2023-01-30
    面向对象 socket
  • python之路day06 面向对象
    面向对象(你就是上帝): 世间万物,皆可分类 世界万物,皆为对象 https://www.cnblogs.com/alex3714/articles/5188179.html 面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来...
    99+
    2023-01-30
    之路 面向对象 python
  • python之初始面向对象
    1. 初识面向对象   面向过程:     一切以事务的发展流程为中心.   面向对象:     一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 2. 类. 对象 ...
    99+
    2023-01-30
    面向对象 python
  • python 面向对象之变量
    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。实例变量:定义在方法中的变量,只作用于当前实例的类。类变量的用途?大家公共的属性,节省开销看下面一段代码class Role...
    99+
    2023-01-30
    变量 面向对象 python
  • python 面向对象之多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的...
    99+
    2023-01-30
    面向对象 多态 python
  • python之成员(面向对象)
    1. 成员   在类中你能写的所有内容都是类的成员    class Person: def __init__(self, name, gender): self.name = name # 成员...
    99+
    2023-01-30
    面向对象 成员 python
  • python面向对象之反射
    一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属×××互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态方...
    99+
    2023-01-31
    反射 面向对象 python
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
  • python之模块和包
    1 模块化 一般来说,编程语言中,库,包,模块是同一种概念,是代码组织方式 python中只有一种模块对象类型,但是为了模块化组织的便利,提供了一个概念: 包模块(module):指的是python的源代码文件 包(package):指...
    99+
    2023-01-31
    模块 python
  • 【python】面向对象编程之@prop
      @property装饰器作用:把一个方法变成属性调用 使用@property可以实现将类方法转换为只读属性,同时可以自定义setter、getter、deleter方法   @property&@.setter class ...
    99+
    2023-01-31
    面向对象 python prop
  • python面向对象之类成员
    一、概述       上篇《python面向对象OOP》介绍了python面向对象的基础初级入门部分,提到了类的定义,使用,类的三大特性;经典类,新式类在查找时的区别等,有了前面的基础,本文接着描述面向对象中类成员;先整体描述下,类中的成员...
    99+
    2023-01-31
    面向对象 成员 python
  • python 面向对象之类方法
    类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量举个例子class Dog(object):     def __i...
    99+
    2023-01-30
    面向对象 方法 python
  • Python全栈之面向对象基础
    目录1. 面向对象oop了解2. 对象的相关操作小提示:3. 类的相关操作4. 类对象的删除操作小提示:5. 小练习小提示:答案:总结1. 面向对象oop了解 # ### oop...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作