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

Python的types库学习记录

        types 库是 Python 标准库中的一部分,它提供了与 Python 对象类型相关的工具和常量,有助于在运行时处理和操作不同类型的对象。

以下是对 types 库的详细介绍:

  • 主要用途

         • 类型检查:在运行时判断对象的类型。

         • 动态创建和操作类型:允许在程序运行过程中动态地创建新的类型或修改现有类型的行为。

        • 提供特殊类型的常量:定义了一些特殊的 Python 类型,方便开发者使用。  

  • 常用类型和函数

        • 内置类型常量: types 模块定义了许多内置类型的常量,这些常量可以用于类型检查。

        以下是一些常见的类型常量:

         • types.FunctionType:表示 Python 函数类型。

        • types.MethodType:表示实例方法类型。

         • types.LambdaType:表示 lambda 函数类型。

        • types.GeneratorType:表示生成器类型。  

  • 示例代码 

        类型检查
import types

# 定义一个普通函数
def my_function():
    pass

# 定义一个 lambda 函数
my_lambda = lambda: None

# 创建一个生成器
def my_generator():
    yield 1

gen = my_generator()

# 类型检查
print(isinstance(my_function, types.FunctionType))     # 输出: True
print(isinstance(my_lambda, types.LambdaType))         # 输出: True
print(isinstance(gen, types.GeneratorType))            # 输出: True
使用types.MethodType将函数绑定到对象

        types.MethodType 用于将一个函数绑定到一个对象上,使其成为该对象的实例方法。这在需要动态为对象添加方法时非常有用。

import types

class MyClass:
    def __init__(self):
        self.value = 10

# 定义一个外部函数
def new_method(self):
    return self.value * 2

# 创建一个 MyClass 实例
obj = MyClass()

# 将外部函数绑定为实例方法
obj.new_method = types.MethodType(new_method, obj)

# 调用新方法
result = obj.new_method()
print(result)   # 输出: 20
使用types.MethodType动态修改对象的函数

类似的方法,使用types.MethodType将新的函数绑定到已有实例上,并替换实例的原有方法

import types

class MyClass:
    def __init__(self):
        self.y = 1
        pass

    def func(self, x):
        return x

obj = MyClass()
print(obj.func(2))

# 定义新的函数
def new_func(obj,x):
    print(obj.y)
    x = x * 3
    return x

# 使用types.MethodType将新的函数绑定到已有实例上,并替换实例的原有方法
obj.func = types.MethodType(new_func, obj)
print(obj.func(2))

使用types.ModuleType创建模块对象

create_module.py

import types
import sys

# 创建一个新的模块对象
new_module = types.ModuleType('new_module')

# 为模块添加属性
new_module.my_variable = 100

# 将新模块添加到 sys.modules 中
sys.modules['new_module'] = new_module


在另一个模块中引用创建的模块对象 

from create_module import new_module


# 创建一个类
class MyClass:
    def __init__(self, x):
        print(x)
    pass

obj = MyClass(new_module.my_variable)
 使用types.SimpleNamespace创建简单的对象命名空间

types.SimpleNamespace 是一个简单的对象命名空间,类似于 dict,但可以使用点号访问属性。

import types

# 创建一个 SimpleNamespace 对象
namespace = types.SimpleNamespace(name='John', age=30)

# 访问属性
print(namespace.name)  # 输出: John
print(namespace.age)   # 输出: 30

# 修改属性
namespace.age = 31
print(namespace.age)   # 输出: 31
如果绑定了外部函数,解绑并恢复默认函数的方法 
import types


class MyClass:
    def __init__(self):
        pass

    def method(self):
        print("MyClass.method()")

# 定义一个外部函数
def new_method(self):
    print("MyClass.new_method()")

# 创建一个 MyClass 实例
my_class = MyClass()

# 调用默认方法
my_class.method()

# 获取默认方法并备份,以备解绑
original_func = my_class.method

# 将外部函数 new_method 绑定到 MyClass 实例上
my_class.method = types.MethodType(new_method, my_class)

# 调用新方法
my_class.method()

# 如果备份过默认方法,解绑新方法并恢复默认的方法
my_class.method = original_func

# #####################通过__get__方法获取默认方法以解绑#######################
# my_class.method = MyClass.method.__get__(my_class, MyClass)
# ########################################################################
# 再次调用默认方法
my_class.method()

        上面代码提供了两种解绑的方法,一种是备份实例的原有函数并重设以解绑另一种从原始的类定义中使用__get__获取原有函数并重设

  总结

        types 库提供了一些有用的工具和常量,帮助开发者在运行时处理和操作不同类型的对象。通过使用这些工具,开发者可以实现动态类型检查、动态方法绑定和动态模块创建等功能。

相关文章:

  • todolist docker 小工具
  • 【零基础入门unity游戏开发——进阶篇】unity中配合VideoClip和VideoPlayer组件实现视频播放
  • 给单片机生成字库的方案
  • Android中实现多线程的几种方式
  • 计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法
  • 【人工智能】人工智能安全(AI Security)
  • SQL Server表数据变更捕获的5种方法及实战对比
  • Simulink指导手册笔记①--自动创建模型
  • LeetCode 解题思路 16(Hot 100)
  • spring 创建单例 Bean 源码分析
  • itsdangerous加解密源码分析|BUG汇总
  • 大语言模型入门文献推荐
  • 每日Attention学习28——Strip Pooling
  • 【Golang】第二弹-----变量、基本数据类型、标识符
  • 上传本地项目到GitHub
  • 守护中国软件供应链安全,未名湖畔的筑梦人
  • Adobe Premiere Pro2023配置要求
  • 【Function】使用托管身份调用Function App触发器,以增强安全性
  • 深入解析 TensorFlow 兼容性问题及构建输出文件结构*
  • 操作系统八股文整理(一)
  • 开个做网站的公司/win10最强性能优化设置
  • wordpress开发平台/seo实战培训
  • 网站建设服务合同书/软文营销文章300字
  • 上海热线网站建设/爱站seo工具包下载
  • 设计公司海报/高端网站优化公司
  • 个人做网站接装修活哪个网站好/长春网络优化哪个公司在做