• ~~面向对象进阶(六):动态创建类~~


    进击のpython

    *****

    用type动态创建一个类


    还记得嘛?我们总说,python一切皆对象!是吧

    我们经常这么说,但是,真的是一切皆对象嘛?

    class Demo(object):
        def __init__(self, name):
            self.name = name
    
    
    p = Demo("ponny")
    

    我们打印一下这个实例化的p的类型,看看是啥!

    print(type(p))
    
    <class '__main__.Demo'>
    

    可以看出,这是实例是源自于Demo这个类的对吧

    那你说,Demo这个类是源自于什么呢?

    (猜不出来就打印一下嘛)

    <class 'type'>
    

    这是啥??type??

    如果按照上面的说法

    难道说... ...


    没错!就是你想的那样,这个类是源自于type

    没想到吧!

    实例源自于Demo这个类,反着说就是Demo这个类生成了实例

    那要是这样说的话

    我应该是可以通过type方法来生成一个类才对是吧

    试一试

    a = type("Hello", (object,), {"name": "ponny"})
    print(type(a))
    

    我们发现打印出来的竟然是<class 'type'>

    那说明什么?说明我们已经成功的创建了一个类


    那咱们就来研究一下,这个type中的各个位置填的都是啥吧

    这两个是的等价的、根据类比就知道每个位置都是干什么的了嘛

    那有问题啊!类里面不只有属性啊,还有方法啊!

    你这一行type,能写吗?

    你能想到的问题,上帝能想不到嘛?

    我们要首先在外面定义一个方法,然后再写在你的字典里

    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    
    Hello = type("Hello", (object,), {"name": "ponny", "__init__": __init__})
    

    这样就相当于把你的方法写到了这个类上了

    我们可以试试

    s = Hello("ponny", 18)
    print(s.name, s.age)
    

    执行一下:

    ponny 18
    

    对吧,这样就达到了我们的目的


    有什么用呢??

    你现在可能感受不到

    但是,要记住这种使用方法

    到某个时刻

    你会突然发现这个东西的奥妙!


    *这个是真的很重要*
    *但你现在感觉不到*
  • 相关阅读:
    Jenkins系列之二——centos 6.9 + JenKins 安装
    查看linux系统是运行在物理机还是虚拟机方法
    Java 的不可变类 (IMMUTABLE CLASS) 和 可变类 (MUTABLE CLASS)
    Java中的mutable和immutable对象实例讲解
    理解Java中的引用传递和值传递
    深入理解Java中的Clone与深拷贝和浅拷贝
    java Clone使用方法详解
    Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
    赏美-第[001]期-20190504
    赏美-第[000]期
  • 原文地址:https://www.cnblogs.com/jevious/p/11278445.html
Copyright © 2020-2023  润新知