metaclass的另类用法

作者: 远飞的大雁2010 | 来源:发表于2016-10-08 15:57 被阅读22次

python 的metaclass 一般是创建或初始化class 时使用的,用来增减或调整class 的属性、方法。但其实metaclass 还有一个用处就是增加类的方法。可以用来增加一些只能通过类而不能通过对象访问的方法。是用来实现工厂模式的好方法。

实例1

import re

class _R(type):
    def __truediv__(self,*args):
        return R(*args)

class R(metaclass=_R):
    def __init__(self,*args):
        self._regex=re.compile(*args)

    def __getattr__(self,name):
        return getattr(self._regex,name)
    
abc=R/'\d+'
print(abc.search('ab1234de').group())

上面例子中R/pattern语句实际上是调用 _R.__truediv__ 方法,该方法生成一个R类的实例。

实例2

class _P(type):
    def __getattr__(self,name):
        return P(name)

class P(metaclass=_P):
    def __init__(self,name):
        self.name=name

    def hello(self):
        print('Hello %s!'%(self.name))

P.zhangsan.hello()

上面的例子,我们在使用P.zhangsan时实际调用了_P__getattr__方法,用来生成一个P的对象。

如果我们使用P.zhangsan.lisi时却会触发异常,因为P对象并没有实现__getattr__的方法。

上述语法的作用

其实classmethod 也可以实现上述功能,但classmethod 可以被对象访问,会造成一些不必要的问题。metaclass 的这一特性可以用来实现一些语些糖。

相关文章

  • metaclass的另类用法

    python 的metaclass 一般是创建或初始化class 时使用的,用来增减或调整class 的属性、方法...

  • Python metaclass/type 原理详解

    在学习metaclass 之前先了解一下 type() 和 isinstance() 函数的用法。 内置函数 ty...

  • isa与meta class

    isa 类的实例对象-》class-〉metaclass metaclass 》root meta class r...

  • 「用工具升级大脑」专栏会员通讯 | 第十六期

    本期主题 《Keynote的另类用法》 推荐工具 Keynote(Mac操作系统自带)PowerPoint(逻辑也...

  • python中MetaClass的一些用法

    元类在很多编程语言中都有这样的概念,我们都知道,类可以创建对象,类本身也是对象,既然是对象,那么它肯定也是被创造出...

  • 雪花粉的另类用法

    名词解释:雪花粉钓鱼饵料的一种,是由薯类经脱水、干燥、膨化而制成的白色片状物,又被称为马铃薯粉,因其形状、材质像雪...

  • crontab 另类用法 reboot

    平时写 crontab 定时任务的时候,语法是这个样子的: 看一篇文章,竟然还支持重启系统时,执行任务,查了官方文...

  • 面试常考(python)

    Python语言特性 1.Python的函数参数传递 2.元类 metaclass metaclass 允许创建类...

  • 一文搞懂什么是Python的metaclass

    Python 有很多黑魔法,为了不分你的心,今天只讲 metaclass。对于 metaclass 这种特性,有两...

  • 滴答清单的另类用法2

    上次我们说了滴答清单的另类用法1,可以用来做稍后读软件。这次再介绍一个滴答清单的,另外的一个有趣用法。

网友评论

    本文标题:metaclass的另类用法

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