美文网首页
python元类编程(4)

python元类编程(4)

作者: TheRightPath1 | 来源:发表于2020-02-10 22:55 被阅读0次

1.如何在python中动态地创建类

方法一 :通过传入的参数进行判断生成类
代码实例

def my_class(a):
    if a == 'a':
        class A(object):
            def __str__(self):
                return 'a'
        return A
    elif a == 'b':
        class B(object):
            def __str__(self):
                return 'b'
        return B

m = my_class('a')
print(m())

运行结果

a

但该方法麻烦不灵活,因此可以使用type()来创建类

方法二: 使用type来动态创建类
type是用来创建类的类。需要给type传入三个参数,第一个参数是类名称, 第二个是类继承的基类并且需要传入元祖,第三个是类属性
代码示例

# 创建类使用的函数,必须有一个self参数
def say(self):
    return 'say'
my_class = type('User', (object,), {'name': '小红', 'say': say})
print(my_class().name)
print(my_class().say())

运行结果

小红
say

2.什么是元类

元类就是用来创建类的类, type就是一个元类。
python类的实例化过程: 先在自己的类中寻找metaclass参数,如果不存在就在基类中寻找metaclass,如果基类中也不存在就在模块中寻找,如果找不到metaclass参数就调用type来创建类

元类最常用的使用方法就是当一个类继承另一个类时,假如需要重写某些方法,如果不重写就应该报错。这时候可以使用元类在调用new魔法方法的时候进行检查,如果没有重写某些方法就抛出异常。

代码示例


class Metaclass(type):
    def __new__(cls, *args, **kwargs):
        # 元类必须继承type,并且调用基类方法时必须传入所有参数
        return super().__new__(cls, *args, **kwargs)


class User(metaclass=Metaclass):

    def __init__(self, name):
        self.name = name

    def __str__(self):
        return 'user'


if __name__ == '__main__':
    u = User(name='123')
    print(u)

相关文章

  • python元类编程(4)

    1.如何在python中动态地创建类 方法一 :通过传入的参数进行判断生成类代码实例 运行结果 但该方法麻烦不灵活...

  • python元类编程

    1.__new__和__init__区别

  • Python类元编程

    1. 什么是类元编程 类元编程是指动态地创建或定制类,也就是在运行时根据不同的条件生成符合要求的类,一般来说,类元...

  • python元编程详解

    注:采转归档,自己学习查询使用 python元编程详解(1)python元编程详解(2)python元编程详解(3...

  • python元编程详解

    一、元编程的概念 元编程依赖于python的一个叫做元类的概念。元类就是当你的某段代码在被执行的过程中,另外一段代...

  • Python进阶7

    元类编程 Python属性函数 引言 Python中我们对于自己设置的类,尽量要使其属性私有化,获得更好的封装性。...

  • python元类编程(3)

    1. new方法和init方法的区别 new放法用来控制对象的生成过程,是在对象生成之前调用。该方法的第一个参数是...

  • python元类编程(1)

    1. property动态属性 @property装饰器可以把一个类函数变成一个属性描述符, 能够像访问类的属性一...

  • 12、python元类编程

    1.1.propety动态属性 在面向对象编程中,我们一般把名词性的东西映射成属性,动词性的东西映射成方法。在py...

  • Python元类编程(type)

    一、类是如何产生的 表面上使用继承创建一个类 所有类都直接或间接继承于object而真正创建类的是type typ...

网友评论

      本文标题:python元类编程(4)

      本文链接:https://www.haomeiwen.com/subject/evnzxhtx.html