IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 的元类问题 -> 正文阅读

[Python知识库]Python 的元类问题

一.元类

??? ????元类

??? ? ?元类就是类的类,python中函数type实际上是一个元类。type就是Python在背后默认用来创建所有类的元类。Python中所有的东西——都是对象。这包括整数、字符串、函数以及类。它们全部都是对象,而且它们都是从一个类创建而来,这个类就是type。ype就是Python的内建元类,当然了,也可以创建自己的元类。

# 传统方式创建类
class Foo(object):

    v1 = 123

    def func(self):
        return 666

# 非传统方式创建类
Foo = type("Foo", (object, ), { "v1":123, "func":lambda self:666 })
print(Foo)  # <class '__main__.Foo'>

类默认由type(python内建元类)创建,怎么样类的创建改成其他元类呢? 自定义一个元类,然后在创建类时指定。

# 自定义type方法
class Mytype(type):

    # 改 __init__方法是用来初始化类的
    def __init__(self, *args, **kwargs):
        # 调用 type 的 __init__ 方法
        # 创建类时可以进行扩展
        super().__init__(*args, **kwargs)

    # 该__new__方法是用来创建类的
    def __new__(cls, *args, **kwargs):
        # 创建类时可以进行扩展
        new_cls = super().__new__(cls, *args, **kwargs)
        return new_cls

    # 当  Mytype() ==>  ( Mytype + () ) 时被调用
    def __call__(self, *args, **kwargs):
		# 创建对象进行扩展
            
        # 调用当前self 指向的类 去 创建对象
        empty_object = self.__new__(self)  # self ==> cls  平常所见的cls代表类,self 代表当前指向的类
        
         # 调用当前self 指向的类 去 初始化对象  传进参数为 empty_object 对象  这时类里的self -->  empty_object 对象
        self.__init__(empty_object, *args, **kwargs)

        return empty_object
"""
可以先这么理解:
假设Foo是一个对象,由Mytype创建
Foo 类其实是 Mytype 的一个对象
Foo() -- Mytype() --> 调用 Mytype的__call__方法
"""
class Foo(object, metaclass=Mytype):
    def __init__(self, name):
        self.name = name

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:21:33  更:2021-08-17 15:22:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:35:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码