出租魔法使第二季,魔云阁魔术之家,团长别碰我
元类编程,生成类的类,可以动态生成类。
用法: type(name, bases, dict)
name -> 类名: str
bases -> 基类: tuple
dict -> 属性: dict
enummeta元类是用于生成enum类,后续类都继承enum类。
class enummeta(type): def __new__(metacls, cls, bases, classdict): # member_type 枚举成员的类型 # first_enum 第一个继承的类型枚举类 member_type, first_enum = metacls._get_mixins_(bases) .......
_get_mixins_方法
@staticmethod def _get_mixins_(bases): """ 返回用于创建枚举成员的类型,以及第一个继承的类型枚举类。 """ # 这里是enum(metaclass=enum)时用到的,bases=() if not bases: return object, enum # 继承自enum类的子类,由以下方法判断 member_type = first_enum = none for base in bases: if (base is not enum and issubclass(base, enum) and base._member_names_): raise typeerror("cannot extend enumerations") # base is now the last base in bases if not issubclass(base, enum): raise typeerror("new enumerations must be created as " "`classname([mixin_type,] enum_type)`") # get correct mix-in type (either mix-in type of enum subclass, or # first base if last base is enum) if not issubclass(bases[0], enum): member_type = bases[0] # first data type first_enum = bases[-1] # enum type else: for base in bases[0].__mro__: # most common: (intenum, int, enum, object) # possible: (<enum 'autointenum'>, <enum 'intenum'>, # <class 'int'>, <enum 'enum'>, # <class 'object'>) if issubclass(base, enum): if first_enum is none: first_enum = base else: if member_type is none: member_type = base return member_type, first_enum
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python 实现将numpy中的nan和inf,nan替换成对应的均值
python爬虫把url链接编码成gbk2312格式过程解析
网友评论