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()

 

 兩種方法的執行結果相同:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM