Python 自定义元类的两种写法

有关元类是什么大家自己搜索了解,我这里写一下实现元类的两种写法

# 自定义元类
#继承type
class LowercaseMeta(type):
    '''
    修改类的属性名称为小写的元类
    '''
    # __new__ 类的实列的创建 #__init__类的初始化

    #方法一:
    def __new__(mcs,name,bases,attrs):
        lower_attrs={}
        for k,v in attrs.items():
            if not k.startswith('__'): #排除magic method
                lower_attrs[k.lower()]=v
            else:
                lower_attrs[k]=v
        return type.__new__(mcs,name,bases,lower_attrs)

    # 方法二:
    # def __new__(cls, *args, **kwargs):
    #     #将要替换args
    #     new_args=[]
    #     for arg in args:
    #         if isinstance(arg,dict):
    #             low_attrs = {}
    #             for k,v in arg.items():
    #                 if str(k).startswith('__'): #magic method
    #                     low_attrs[k]=v
    #                 else:       #排除magic method
    #                     low_attrs[str(k).lower()]=v
    #             new_args.append(low_attrs)
    #         else:
    #             new_args.append(arg)
    #     return type.__new__(cls,*new_args,**kwargs)

#
class LowercaseClass(metaclass=LowercaseMeta): #py3
    BAR=True

    def HELLO(self):
        print('hello')

#此时BAT,HELLO   都变为小写
print(dir(LowercaseClass))
LowercaseClass().hello()

 

 两种方法的执行结果相同:

 

转载于:https://www.cnblogs.com/feiquan/p/11110632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值