Python编程:元类的简单使用

简介: Python编程:元类的简单使用

元类

Python 2.7.5 旧式类

class Foo():
    pass

foo = Foo()

print(type(foo))
print(type(Foo))
print(type(type))
# <type 'instance'>
# <type 'classobj'>
# <type 'type'>

Python 3.6.5 新式类

class Foo():

pass

foo = Foo()

print(type(foo))
print(type(Foo))
print(type(type))
# <class '__main__.Foo'>
# <class 'type'>
# <class 'type'>

type是一个元类,任何类都是它的实例。

就像一个普通的对象是一个类的实例一样


Python中的任何新式类 以及 Python3中的任何类 都是type元类的一个实例


x是类Foo的一个实例。

Foo是type元类的一个实例。

type也是type元类的一个实例,所以它是它自己的一个实例。

111.png

以下测试,在Python 3.6.5 中完成

动态定义类

type函数

type(<name>, <bases>, <dict>)

<name> 类名称 __name__属性
<bases> 继承类的基类元组,__bases__属性
<dict> 包含类主体定义的名称空间字典,__dict__属性

例如

# -- coding: utf-8 --

def get_name(self):
return "foo"


# 定义类
Foo = type("Foo", (object, ), {"name": "foo", "get_name": get_name})


foo = Foo()

# 获取属性
print(foo.name)
# foo


# 调用方法
print(foo.get_name())
# foo

以上定义的类相当于

class Foo(object):
name = "foo"

def get_name(self):
return "foo"

通过元类的方式给子类添加属性

# -- coding: utf-8 --

class Meta(type):
def __new__(cls, name, bases, dct):
instance = super().__new__(cls, name, bases, dct)
instance.name = "meta"
return instance


class Foo(metaclass=Meta):
pass


print(Foo.name)
# meta

通过继承的方式给子类添加属性

# -- coding: utf-8 --

class Base(object):
name = "meta"


class Foo(Base):
pass


print(Foo.name)
# meta

通过类装饰器的方式给子类添加属性

# -- coding: utf-8 --

def decorator(cls):
class NewClass(cls):
name = "meta"

return NewClass


@decorator
class Foo(object):
pass


print(Foo.name)
# meta


参考

Python黑魔法:元类

            </div>
目录
相关文章
|
5天前
|
数据采集 人工智能 安全
|
15天前
|
云安全 监控 安全
|
1天前
|
存储 SQL 大数据
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
删库跑路?别慌!Time Travel 带你穿回昨天的数据世界
234 156
|
8天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
590 5
|
11天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
769 152
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1867 9
|
2天前
|
机器学习/深度学习 人工智能 监控
别把模型当宠物养:从 CI/CD 到 MLOps 的工程化“成人礼”
别把模型当宠物养:从 CI/CD 到 MLOps 的工程化“成人礼”
217 163