深入了解python中元类和连接符的用法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第20天】本文介绍包括`type`的多重用途,内建函数的常量,模块属性,类继承的概念,元类的工作原理,可哈希对象的重要性,加权平均值的计算,以及如何找到两个列表的交集。

简介

  • type 元类:用于判断对象类型、动态创建类和作为所有对象的父类。
  • 内建函数:包括 True, False, None, Ellipsis, NotImplemented 等常量,以及 __import__ 和元编程功能。
  • dir(__builtins__) 显示内建模块属性,如 __name__, __doc__ 等。
  • 类继承:通过 type 动态创建子类,如 type Child ;, (Parent,), { method : lambda: })
  • 元类:控制类的创建,通过 __metaclass__ 指定。
  • 可哈希对象:用于字典键,如整数、浮点数、字符串、元组和 frozensets,必须不可变。
  • 权重平均:使用列表推导式计算加权平均值。
  • 交集:通过 filterset 计算两个列表的交集。

Toroid托瑞德符号.png

1 type 元类

3个用法

  • 1,判断对象类型

    type(2)

    int

    type('a')

    string

  • 2, 动态创建类

接收一个类的描述符作为参数,然后返回一个类

type(类名,父类元组(针对继承的场景,可以为空),包含属性的字典(名称和值))

class myclass:
    pass

等价与

  mySingClass = type('myclass', (), {})

其他例子

Foo = type('Foo', (), {'bar':True})
  • 3 type 类工厂

    type 是所有object对象的父类

    所有对象都继承自object,所有类都继承自type

type可用于动态创建新类的内置函数。

1),如果给定参数,则返回参数的类型

    type(1)
        <class 'int'>

2),如果给定3个参数 name,bases,dict,它将创建一个新类

name定义类的名称
bases定义基类,即超类
dict定义所有类属性和方法。

    clsas MyClass(MySuperClass):
        def x(self):
            print('x')

与此类相同

def x_function(self):
    print('x')
MyClass = type("MyClass", (MySuperClass,), {'x', x_function})

这是可实现collections.namedtuple类的一种方式,例如,它接收类名和属性元组。

2 内建函数

5个常量

True, False, None, Ellipsis 也可写为 ... 为了支持类型注释,以及一些花俏的切片支持。

NotImplemented 用于类的运算符定义,使得一个类不支持某些操作。

当您希望告诉python 为此类定义某个运算符时,使用它。

所有的python对象都可用通过在其类中定义的特殊方法添加对所有python运算符的重新定义
+=add + iadd +=

3 内建公共函数

print(dir(builtins))

模块属性

  • name # 模块名称

  • doc # 模块文档字符串

  • package # 该模块所属的包,对于顶级模块与name对于子模块 它是包的name

  • spec # 指模块规范,它包含元数据,模块名称,什么类型以及它是如何创建 加载的

  • loader # 设置为加载模块时导入机制使用的加载器对象,特定在 _frozen_importlib模块定义

  • import # 是定义导入语句如何在python工作的内置函数,在内部是python对import语句所做的

  • debug # #python的全局常量值,总是设置为 True,python在调试模式运行。

  • -o 在优化模式,阻止断言语句做任何事情。

  • debug True False None 是 python真正的常量,不能被更改

  • build_class # 允许类定义接收任意位置和 关键字参数,涉及元类问题

        类创建语法只允许传递要继承的基类和元类属性。
    新要求是允许可变数量的位置和关键字参数。添加到语言中会有点混乱和复杂。
    
  • cached # 导入模块时,该属性存储该模块的已编译python __cached的缓存文件路径

4 使用type 继承

普通继承方式

class chindFoo(Foo):
    pass

使用type方式继承

typeChindFoo = type('typeChindFoo', (Foo,), {'chind_foo':'chindFoo'})
print(typeChindFoo().chind_foo)
    'chindFoo'
hasattr(typeChindFoo, "chind_foo")
    True

对象属性保存在 class

foo.__class__.__class__
    <type 'type'>

5 自定义元类

  • metaclass

    python创建类时,先在当前定义中寻找 metaclass,如果有就使用 metaclass 创建类
    如果没有 ,那么就在 父类中寻找 metaclass, 父类都没有,则在模块中寻找metaclass

    如果都找不到,python将使用 type创建这个类

    在创建类时 把属性都改为大写的

6 可hash/散列的 对象

字典的key 应该是hashable。这就是为什么我们总是使用可散列对象作为键。

可散列对象是整数、浮点数、字符串、元组和frozensets

可散列对象也是不可变对象

可变对象: 列表,字典,集合。

7 两个列表的加权平均

权重

     weight = [0.5, 0.8, 0.7, 0.8, 1.0]

  values = [10, 20, 10, 10, 30]

平均值

 s = sum ( [ weight[i] * values[i] for i in range(len(weight)) ] )/ sum (values)

 zip_average = sum ( [ x * y for x,y in zip ( weights , values ) ] ) / sum (values)

打印平均值,

    print(zip_average) # 0.825 0.825

8 推导式:两个列表的交集

filter 和列表推导式

 a = [1,2,3,5,7,9]
 b = [2,3,5,6,7,8]
 print(filter(lambda x: x in a, b)) # 打印出 [2, 3, 5, 7]

或使用set 计算两个列表的合集

 list(set(a) & set(b))

小结

本文介绍包括type的多重用途,内建函数的常量,模块属性,类继承的概念,元类的工作原理,可哈希对象的重要性,加权平均值的计算,以及如何找到两个列表的交集。

目录
相关文章
|
1天前
|
算法 Python
Python新式类和经典类
Python新式类和经典类
|
3天前
|
安全 测试技术 Python
Python类中的Setter与Getter:跨文件调用的艺术
Python类中的Setter与Getter:跨文件调用的艺术
10 3
|
4天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之建了一个python 的 UDF脚本,生成函数引用总是说类不存在,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
8天前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
13 2
|
8天前
|
存储 程序员 Python
Python类属性与实例属性详解
Python 中区分类属性和实例属性的设计是为了满足不同的需求和使用场景。这种区分使得代码更加灵活、清晰,并且能够提供更好的封装性和可维护性。类属性用于表示与整个类相关的数据,而实例属性则用于表示每个实例的特定信息。这样,我们可以将关注点分离开来,使得代码更易于理解、维护和扩展。在实际应用中,我们可以根据具体的情况,选择适当的属性类型来组织和管理代码。
12 1
|
1天前
|
Python
经验大分享:python类函数,实例函数,静态函数
经验大分享:python类函数,实例函数,静态函数
|
2天前
|
自然语言处理 Java API
Python之:Python中的类
Python之:Python中的类
|
6天前
Python----end、sep的用法
Python----end、sep的用法
10 0
|
7天前
|
人工智能 测试技术 Python
Python数组类+AI插件
Python数组类+AI插件
一分钟看懂Python中的 // 和 / 和 % 的用法区别
一分钟看懂Python中的 // 和 / 和 % 的用法区别