关于元类的说明

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()
原文地址:https://www.cnblogs.com/RiverMap/p/12649761.html