python中元类用法实例

yipeiwu_com6年前Python基础

本文实例讲述了python中元类用法,分享给大家供大家参考。具体方法分析如下:

1.元类(metaclass)是用来创建类的类

2.type(object):返回一个对象的类型,与object.__class__的值相同,type(name,bases,dict):创建一个新的type类型,name就是新class的name,值存到__name__属性中,bases是tuple类型,值会存到__bases__中,dict的值存到__dict__中

复制代码 代码如下:
class X:
...     a = 1
...
X = type('X', (object,), dict(a=1))

3.类默认是用type()创建的,通过定义类时指定metaclass参数或继承自某个类,而该类指定了metaclass参数,可以自定义类的创建过程

复制代码 代码如下:
class OrderedClass(type):
     #该方法返回值就是__new__的namespace参数,如果没有该方法namespace的值就是dict()
     @classmethod
     def __prepare__(metacls, name, bases, **kwds):
        return collections.OrderedDict()
     #namespace就是class的__dict__,这个dict类型的对象已经被填充了相应的值
     def __new__(cls, name, bases, namespace, **kwds):
        result = type.__new__(cls, name, bases, dict(namespace))
        result.members = tuple(namespace)
        return result

class A(metaclass=OrderedClass):
    def one(self): pass
    def two(self): pass
    def three(self): pass
    def four(self): pass
print(A.members)
#('__module__', '__qualname__', 'one', 'two', 'three', 'four')

希望本文所述对大家的Python程序设计有所帮助。

相关文章

对Python 窗体(tkinter)树状数据(Treeview)详解

如下所示: import tkinter from tkinter import ttk #导入内部包 win=tkinter.Tk() tree=ttk.Treeview(wi...

浅谈python3.6的tkinter运行问题

python3.6在运行tkinter时要选择 run as Python unit-test, 否则报错 ModuleNotFoundError: No module named 't...

对Python生成器、装饰器、递归的使用详解

1、Python生成器表达式 1)、Python生成器表达式 语法格式: (expr for iter_var in iterable) (expr for iter_var in it...

浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

使用摄像头追踪人脸由于血液流动引起的面部色素的微小变化实现实时脉搏评估。 效果如下(演示视频):  由于这是通过比较面部色素的变化评估脉搏所以光线、人体移动、不同角度、不同...

Python实现调度算法代码详解

Python实现调度算法代码详解

调度算法 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使...