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月前
|
Python
Python教程第10章 | 通俗易懂学装饰器
本章通过案例讲述了Python装饰器的基本概念与实战用法
517 0
Python教程第10章 | 通俗易懂学装饰器
|
11天前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器使用与原理解析
【9月更文挑战第20天】本文深入探讨Python中一个强大而神秘的功能——装饰器。通过浅显易懂的语言和生动的比喻,我们将一步步揭开装饰器的面纱,理解其背后的原理,并通过实际代码示例掌握如何运用装饰器来增强我们的函数功能。无论你是初学者还是有一定基础的开发者,这篇文章都将带给你新的启发和思考。
27 7
|
3月前
|
缓存 测试技术 程序员
Python 装饰器怎么用?
Python装饰器是强大的工具,可在不改变原函数的情况下增添功能,如日志记录、性能测试、缓存、权限校验及参数验证。示例展示如何用装饰器自动记录函数调用信息,测量执行时间,缓存计算结果加速,检查用户权限,及确保参数类型正确。装饰器简化功能扩展,提升代码效率、维护性与可读性。 ```markdown # Python装饰器:功能增强利器
|
5月前
|
测试技术 Python
Python中的装饰器应用及实现原理
在Python编程中,装饰器是一种强大的工具,能够有效地扩展函数的功能而不修改其源代码。本文将深入探讨Python中装饰器的应用场景、实现原理以及具体示例,帮助读者更好地理解和运用装饰器提升代码的可读性和灵活性。
|
5月前
|
Python
一篇文章带你搞懂Python中的继承和多态
一篇文章带你搞懂Python中的继承和多态
85 1
|
5月前
|
测试技术 Python
探究Python中的装饰器应用及实现原理
本文将深入探讨Python编程语言中装饰器的应用及实现原理。通过详细分析装饰器在函数中的作用机制,读者将能够更好地理解如何利用装饰器来简化代码、增强函数功能以及实现横切关注点的需求。
|
5月前
|
Java Shell 程序员
Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
39 0
|
Java Python
Python 类与对象实例的介绍与基本使用
Python 类与对象实例的介绍与基本使用
|
Python
【从零学习python 】47. 面向对象编程中的继承概念及基本使用
【从零学习python 】47. 面向对象编程中的继承概念及基本使用
63 0
|
Python
Python编程:元类的简单使用
Python编程:元类的简单使用
78 0
Python编程:元类的简单使用