美文网首页
元类使用示例

元类使用示例

作者: 马小跳_ | 来源:发表于2018-01-10 18:18 被阅读112次

知识储备:
元类的作用:拦截类的创建,做一些自定义的操作,并将修改过的类返回给调用者。

案例演示:
现在有一个类Student,静态字段age为整型。现在想将每一个实例化得到的Student对象中的age属性都加10。

class Stdent():
    age = 10

stu = Stdent()
print(stu.age)  # 10

可以通过元类实现,代码如下:

class Meta(type):
    def __new__(cls, name, parents, attrs):
        kvs = [[k, v] for k, v in attrs.items() if not k.startswith('__')]  # 找到自定义的属性age
        for kv in kvs:
            attrs[kv[0]] += 10  # age+10
        return super(Meta, cls).__new__(cls, name, parents, attrs)


class Stdent(metaclass=Meta):
    age = 10

stu = Stdent()
print(stu.age)  # 20

现在又新增一个需求,需要让Student继承Person类,从而能够使用Person类的方法say

class Person(object):
    def say(self):
        print('我是一个人')

实现代码如下:

class Stdent(Person,metaclass=Meta):
    age = 10

stu = Stdent()
print(stu.age)  # 20
stu.say()  # '我是一个人

这样,Stdent的对象既有say方法,又能实现age自加10。

此外,参考wtfForms源码,还有另外一种实现方式:

stu_plus = Meta('stu_plus', (Person, ), {})
class Stdent(stu_plus):
    age = 10
    
stu = Stdent()
print(stu.age)  # 20
stu.say()  # '我是一个人'

相关文章

  • 元类使用示例

    知识储备:元类的作用:拦截类的创建,做一些自定义的操作,并将修改过的类返回给调用者。 案例演示:现在有一个类Stu...

  • python元类示例

  • OkHttp请求数据封装类

    Util类: Respon类 Json解析类: 使用示例:

  • C++模板

    要点 模板函数在类的外部定义 友元函数在类的外部定义(<<的重载) 模板类中静态变量的使用规则 示例 Array....

  • .NET框架 Purple 3.x 使用

    说明 示例 示例 类库原则使用对类方法扩展实现功能扩展 purple定义 目录定义 使用Purple搭建WebAp...

  • MongoDB Java基本操作

    示例包含2个类文件, 1个操作枚举,1个帮助类. Maven 引用 枚举 帮助类 使用示例

  • python:元类的实际使用

    您可以使用元类对属性、方法及其值执行不同的准则。前面例子(使用 snake_case)的类似示例包括: 值的域限制...

  • php-pdo操作mysql类

    使用示例 数据库操作类代码

  • 2.1.5 Python元类深刻理解(metaclass)

    点击跳转笔记总目录 本节目录 一、创建类的执行流程 二、元类的认识 三、元类的示例 一、创建类的执行流程 类创建过...

  • Python 面向对象高级编程

    使用__slots__ 使用@property 多重继承 定制类 使用枚举类 使用元类

网友评论

      本文标题:元类使用示例

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