zoukankan      html  css  js  c++  java
  • mini-web框架-元类-总结(5.4.1)

    @

    1.说明

    python中万物都是对象
    使用python中自带的globals函数返回一个字典
    通过这个可以调取当前py文件中的所有东西
    当定义一个函数,类,全局变量的时候,其实就是创建了一个对象
    然后在globals获取这个字典中添加的一个名字
    让这个名字指向刚才创建的变量空间
    那么元类是一种特殊的类,它的用处就是创建一个类
    在python中使用元类的作用
    可以元类看做为一种规范,就是定义的类使用了这个元类,就要按照这个规范改写

    2.代码

    使用type创建类
    第一个参数为类名
    第二个参数为继承的父类(元组)
    第三个为类中的属性-变量和函数等(字典)

    Test = type("Test",(),{})
    

    需求:
    把类中的所有属性变为大写
    元类继承type
    在__new__方法中获取cls(类),类名,父类,属性
    然后适当更改
    再返回一个type生成的对象(类)

    
    class UpperAttrMetaClass(type):
        def __new__(cls, class_name,class_parents,class_attr):
            #遍历属性的字典,吧不是__开头的属性改为大写
            new_attr = {}
            for name,value in class_attr.items():
                if not name.startswith("__"):
                    new_attr[name.upper()] = value
    
            #使用type创建一个类
            return type(class_name,class_parents,class_attr)
    
    class Test(object,metaclass=UpperAttrMetaClass):
        bar = "bar"
    
    
    
    test = Test()
    print(hasattr(test,"BAR"))
    
    # print(test.BAR)
    

    关于作者

    个人博客网站
    个人GitHub地址
    个人公众号:
    在这里插入图片描述

  • 相关阅读:
    重点解说--MVVM指南(课程学习)
    模块划分--MVVM指南(课程学习)
    开发步骤--MVVM指南(课程学习)
    MVVM指南(课程学习)
    centos vi和vim用法
    阿里云centos系统上安装ftp
    thinkphp的ip地址定位
    thinkphp方便分页的page方法
    thinkphp data方法
    thinkphp i方法
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11421555.html
Copyright © 2011-2022 走看看