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>
目录
相关文章
|
3月前
|
开发者 Python
Python中的元类深度剖析与实战应用
Python中的元类深度剖析与实战应用
47 0
|
6月前
|
Python
Python高手进阶必备:闭包与装饰器的那些不为人知的高级技巧
【7月更文挑战第6天】Python中的闭包和装饰器是提升代码质量的关键。闭包是能记住外部作用域变量的内嵌函数,常与匿名函数结合,示例展示了如何通过闭包创建具特定行为的函数。装饰器则是不修改原函数即可添加功能的语法结构,它们接收函数作为输入并返回新函数。结合使用,如参数化装饰器,能动态改变函数行为。掌握这些技巧,能增强代码可读性和复用性,推荐在实践中多加利用。
33 0
|
8月前
|
数据安全/隐私保护 Python
Python从入门到精通——2.2.1深入学习面向对象编程:类和对象的定义
Python从入门到精通——2.2.1深入学习面向对象编程:类和对象的定义
|
8月前
|
Python
Python编程中的装饰器应用探究
【2月更文挑战第8天】装饰器是Python编程中一个重要且强大的工具,它能够简洁地实现函数的包装和扩展,提高代码的复用性和可读性。本文将深入探讨装饰器在Python编程中的应用,结合实际例子详细讲解装饰器的定义、使用方法及常见应用场景,帮助读者更好地理解和运用装饰器这一高级特性。
|
8月前
|
Java Shell 程序员
Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
48 0
|
8月前
|
算法 程序员 Shell
Python 进阶指南(编程轻松进阶):十六、面向对象编程和继承
Python 进阶指南(编程轻松进阶):十六、面向对象编程和继承
49 0
|
Python
【从零学习python 】47. 面向对象编程中的继承概念及基本使用
【从零学习python 】47. 面向对象编程中的继承概念及基本使用
82 0
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
|
Python
Python教程:类的继承,什么是继承
- 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 - 继承的特性是:子类会遗传父类的属性 - 继承是类与类之间的关系
154 0
Python教程:类的继承,什么是继承
|
Python
Python编程:元类的简单使用
Python编程:元类的简单使用
85 0
Python编程:元类的简单使用