First
我们先来看一段代码
class type(object): """ type(object_or_name, bases, dict) type(object) -> the object's type type(name, bases, dict) -> a new type """
这是一段 type “函数”的解释。
我们通常知道的是,当我们不确定一个对象是什么类型时,会使用这个函数查询该对象的类型。如:
a = [1, 3, 4] type(a) # <class 'list'>
但 type 的作用远不止于此。现在我们回过头来看开始提到的解释。
type(name, bases, dict) -> a new type # 一个新的对象。
这就是 type 的另一层含义。我们来看一段代码。
animal = type("animal",(object,),{"a": "aa"}) an = animal() print(an.a) # aa
这里 使用 type 创建了一个对象,这个对象的对象名叫:“animal”,它有一个属性:a,值为“aa”。我们可以直接实例化这个对象并获取属性值。
看到这里,你应该知道:type 原来可以创建类。那 object 类是谁创建的呢?
众所周知,object 类是所有类的基类,也就是父类,不过是经典类还是新式类,都继承了object。
我们来看看 object 的父类是谁。
看到了吧,原来 object 竟然也是type创建的。
那么 type 到底是个什么东西呢?其实他就是一个创建类对象的类,即元类,可以这么理解:元类就是类的类。
问题又来了,type 的父类是谁?难道它就没有父类吗?
哈哈哈~ type 创建了自己,但它却是继承自 object 的。
下面我们用 type 创建一个类,并给他添加方法及属性。
name = "zs" age = 12 @classmethod def tell(cls): print("喊") @staticmethod def eat(): print("吃") def run(): print("跑") Person = type("Person", (object,), {"name": name, "age": age, "run":run, "eat":eat, "tell":tell}) person = Person() print(person.name) person.tell() person.eat()