当前位置: 首页 > news >正文

[Python基础速成]2-模块与包与OOP

上篇➡️[Python基础速成]1-Python规范与核心语法

目录

  • Python模块
    • 创建模块与导入
    • 属性__name__
    • dir()函数
    • 标准模块
  • Python包
    • 类的专有方法
  • 对象
  • 继承
  • 多态

Python模块

Python 中的模块(Module)是一个包含 Python 定义和语句的文件,文件名就是模块名加上 .py 后缀。
模块可以包含函数、类、变量以及可执行的代码。通过模块,我们可以将代码组织成可重用的单元,便于管理和维护。

即模块具备代码复用、命名空间管理、代码组织作用。

创建模块与导入

使用import语句导入python源文件。

import module1[, module2[,... moduleN]

Python自定义模块(文件)然后导入示例如下:
1.创建一个fibo.py文件

# 斐波那契(fibonacci)数列模块
 
def fib(n):    # 定义到 n 的斐波那契数列
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()
 
def fib2(n): # 返回到 n 的斐波那契数列
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

2.导入使用

# to test the import

import fibo

def test_fib():
    fibo.fib(10)


test_fib()

总的来说和Java的差不多,有点类似Java导入静态类。
Python还支持部分导入,即from…import语句。

from modname import name1[, name2[, ... nameN]]
# 示例
from fibo import fib, fib2

属性__name__

每个模块都有一个__name__ 属性。

如果模块是被直接运行,__name__ 的值为 __main__

如果模块是被导入的,__name__ 的值为模块名。

比如上面创建的fibo模块,在模块文件内添加

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

如果fibo模块被其他模块执行,则会输出“我来自另一模块”

dir()函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回。

import sys

dir(sys)  
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
 'thread_info', 'version', 'version_info', 'warnoptions']

标准模块

模块名功能描述
math数学运算(如平方根、三角函数等)
os操作系统相关功能(如文件、目录操作)
sys系统相关的参数和函数
random生成随机数
datetime处理日期和时间
json处理 JSON 数据
re正则表达式操作
collections提供额外的数据结构(如 defaultdict、deque)
itertools提供迭代器工具
functools高阶函数工具(如 reduce、lru_cache)

Python包

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。

类似Java的Package,包路径+模块名=全路径=唯一性

语法为:

from Package import specific_submodule 

# 示例
# 导入collections.abc包下的Callable模块
from collections.abc import Callable

Python使用class关键字定义类。

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

Python的self类似Java的this,在类中代指类对象本身。

类的专有方法

  • __init__()

__inin__()将在类创建新示例时被调用,是构造方法。

#!/usr/bin/python3
 
class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   # 输出结果:3.0 -4.5
  • __del__ : 析构函数,释放对象时使用
  • __repr__ : 打印,转换
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __call__: 函数调用
  • __add__: 加运算
  • __sub__: 减运算
  • __mul__: 乘运算
  • __truediv__: 除运算
  • __mod__: 求余运算
  • __pow__: 乘方

对象

通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

继承

即一个派生类(derived class)继承基类(base class)的字段和方法。

class DerivedClassName(BaseClassName):
    <statement-1>
    .
    .
    .
    <statement-N>

# 多继承
class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。

多态

Python的方法重写(Override)和Java类似,且不需要Java的@Override注解。
Python是动态类型语言,不允许同名方法因参数不同而共存,因此不支持传统重载(Overload)。
但可以使用默认参数或可变参数模拟重载。

class Example:
	# 
    def greet(self, name=None):
        if name:
            print(f"Hello, {name}!")
        else:
            print("Hello, World!")

obj = Example()
obj.greet()          # 输出: Hello, World!
obj.greet("Alice")   # 输出: Hello, Alice!

相关文章:

  • 【MySQL】表的增删改查
  • 【HarmonyOS NEXT】多目标产物构建实践
  • Android Studio 中文字大小的单位详解
  • LeetCode 118题解 | 杨辉三角
  • 【Maniskill】训练使用的性能指标
  • 【5G学习】基本概念之多频资源以及子载波和信道
  • RabbitMQ 优先级队列详解
  • 自适应调度器:动态分配测试资源
  • kubernetes》》k8s》》ConfigMap 、Secret
  • 数据结构(3)
  • 一图掌握 MySQL 核心要点
  • 中国CRM系统推荐:如何选择最适合企业的客户管理工具?
  • 机器学习中 提到的张量是什么?
  • CS5346 - Task Abstraction and Task Taxonomy 任务抽象和分类
  • 聊聊类模板
  • 波束形成(BF)从算法仿真到工程源码实现-第九节-延迟相减波束形成(delay sub)
  • 【Vue】v-if和v-show的区别
  • 鸿蒙开发-注解
  • 实时语音交互数字人VideoChat,可自定义形象与音色,支持音色克隆,首包延迟低至3s
  • WebRTC实时通话EasyRTC嵌入式音视频通信SDK,构建智慧医疗远程会诊高效方案
  • 当代视角全新演绎,《风雪夜归人》重归首都剧场
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调
  • 滁州一交通事故责任认定引质疑:民警和司法鉴定人被处罚,已中止诉讼
  • 三亚亚龙湾3.4公里岸线近岸海域使用权挂牌出让,起始价近九千万
  • 山西省朔州市政府党组成员、副市长李润军接受审查调查
  • 赵志丹任中国地质大学(北京)校长