一,
在Python中一切皆对象,类本身就是一个对象,当使用关键字class创建一个类时,Python解释器在加载class时就会创建一个对象
## 证明一个类是type的对象的例子
class Test: pass t = Test() print(type(t)) # <class '__main__.Test'> print(type(Test)) # <class 'type'> # t为类Test的对象 # 类Test时类type的一个对象
## 什么是元类
1,元类是类的类,是类的模板
2,元类用来控制如何创建类的,正如创建对象的模板一样
3,元类的示例为类,正如类的实例为对象(t为类Test的一个实例,类Test是type的一个实例)
4,type是python的一个内建元类,用来控制直接生成类,python中任何class定义的类都是type实例化的对象
## 如何用type表示一个类
class Test: pass print(Test) # <class '__main__.Test'> Test_1 = type("Test_1",(object,),{"x":1}) # type("类名",(类继承的类以元组形式写入),"类中的属性以字典方式写入") print(Test_1) # <class '__main__.Test_1'>
## 用一个type表示一个类,并在类中添加方法
def __init__(self,name,age): self.name = name self.age = age # 备选内置方法 test def test(self): print("我是test方法") Test_1 = type("Test_1",(object,),{"x":1,"__init__":__init__,"test":test}) print(Test_1) # <class '__main__.Test_1'> t = Test_1("henry",18) print(t.x) # 1 print(t.name) # henry print(t.test()) # 我是test方法
# 自定义元类
如果一个类没有自定义自己的元类,那么它的元类就是type,除了使用type来作为自己的元类,用户也可通过继承type来自定义元类
## 自定义元类
class MyType(type): def __init__(self,test_class,test_super,test_attr): print(test_class) # 类Test的类名: Test print(test_super) # 类Test的父类元组:() print(test_attr) # 类Test的属性字典:{'__module__': '__main__', '__qualname__': 'Test'} class Test(metaclass=MyType): # Test = Mytype("Test",(),{}) # 传了4个参数给MyType def __init__(self,name): self.name = name print(Test) # 拿到对象Test t = Test("henry") # 可以进行实例化 print(t.__dict__)
....待完成