• 关于元类的说明


    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()
  • 相关阅读:
    小程序 wx.navigateTo和 wx.redirectTo区别
    小程序返回上一级页面背景音乐报错 setBackgroundAudioState:fail title is nil!;
    centos7 安装RabbitMQ3.6.15 以及各种报错
    MYSQL创建分区时候报错
    scrapy操作mysql/批量下载图片
    深入浅出TCP与IP协议笔记
    python反射详解
    python迭代器
    python生成器
    loggong模块
  • 原文地址:https://www.cnblogs.com/RiverMap/p/12649761.html
Copyright © 2020-2023  润新知