Python元类
本节介绍一下Python中元类的基本内容
type :python3中所有的类都是通过type创建出来的
object :所有类的顶级父类
想说的话在注释中都添加了,想学习的可以看一下
# 元类 python中内置的元类: type # 元组如果只有一个参数需要在参数后面增加一个逗号,不然是错误的。空元组() # type创建类需要三个参数,第一个类名字符串类型 第二个要继承的类是一个元组, # 第三个是属性及方法是一个字典 键值对的形式表示属性或者对应的方法 T = type('小明', (object,), {'attr': 100, '__attr2': 200}) # 会返回一个类 # 类名 要继承的类 类的属性和方法 print(T) class T1(object): attr = 100 __attr2 = 200 print(T1) # 定义的类是相同的 print(T.__dict__) # 查看类所拥有的属性 def func(self): print('-----------这个是self') T3 = type('小明2', (object,), {'function': func}) # 传入方法创建类 print(T3) T3().function() # 自定义元类 必须继承type # type 创建类需要三个参数 class MyClass(type): # 重写new 方法 def __new__(cls, name, bases, attr_dict, *args, **kwargs): print('最基础的自定义元类') # return type.__new__(name, bases, attr_dict) return super().__new__(cls, name, bases, attr_dict) # metaclass 用来指定元类 如果不传默认是type 使用自定义的元类创建的类 class One(metaclass=MyClass): name = '小明' print(type(One)) print(One.name) # 从继承的父类里面找有没有指定元类,如果找到了子类就用父类指定的元类来创建类 class Two(One): pass print(type(Two)) # 定义一个类,通过元类来让该类的类属性变成大写 class MyClassTow(type): def __new__(cls, name, bases, attr_dict, *args, **kwargs): # 遍历属性名称,遍历字典的键值对用items for k, v in attr_dict.items(): attr_dict.pop(k) # 删除key attr_dict[k.upper()] = v # 将key转为大写 # attr_dict['__slots__'] = ['name', 'age', 'gender'] # 限制通过这个元类创建的类的实例对象的属性 return super().__new__(cls, name, bases, attr_dict) class Three(metaclass=MyClassTow): name = '小明' age = 18 gender = '男' print(Three.__dict__)
版权声明:本文为congyiwei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。