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>
目录
相关文章
|
1天前
|
C语言 Python
专为编程小白设计的Python零基础入门教程,GitHub星标破W
市面上大多数技术类的书籍都着重于一步步的构建系统的知识体系,并不是说这样就是不对的,但这样按部就班的学习注定了需要花费大量的时间用来掌握“基础知识”,或死记硬背,或慢慢理解。 然而世界不会迁就你,而是在步步紧逼的告诉你要赶紧学完,赶紧找工作,赶紧挣钱,这才是你生活的基础。 今天给小伙伴们带来了一份《编程小白的第一步Python书》,这本书是专为零基础小白设计的,不会告诉“先学C语言,会更好理解Python”这种狗屁道理。而是先带你掌握搭建项目所用到的最少得知识,再真实的项目搭建中实践自己的所学,逐渐的完善知识体系
|
2天前
|
存储 算法 安全
Python编程实验六:面向对象应用
Python编程实验六:面向对象应用
18 1
|
2天前
|
Python
Python编程作业五:面向对象编程
Python编程作业五:面向对象编程
16 1
|
2天前
|
存储 人工智能 自然语言处理
Python编程实验五:文件的读写操作
Python编程实验五:文件的读写操作
9 0
|
2天前
|
存储 传感器 Python
Python编程作业四:文件操作
Python编程作业四:文件操作
14 0
|
2天前
|
存储 算法 Python
Python编程作业一:程序基本流程
Python编程作业一:程序基本流程
9 0
|
2天前
|
调度 Python
Python进阶---多任务编程
Python进阶---多任务编程
13 3
|
3天前
|
机器学习/深度学习 缓存 人工智能
令你膛目结舌的代码技巧 —— Python编程代码技巧
令你膛目结舌的代码技巧 —— Python编程代码技巧
14 2
|
3天前
|
数据采集 算法 Python
2024年Python最全python基础入门:高阶函数,小米面试编程题
2024年Python最全python基础入门:高阶函数,小米面试编程题
|
3天前
|
数据采集 人工智能 前端开发
干货满满,转行逆袭,0编程基础学Python拿高薪offer如何做?都在这里!
干货满满,转行逆袭,0编程基础学Python拿高薪offer如何做?都在这里!