zoukankan      html  css  js  c++  java
  • ~~面向对象进阶(六):动态创建类~~

    进击の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
    

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


    有什么用呢??

    你现在可能感受不到

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

    到某个时刻

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


    *这个是真的很重要*
    *但你现在感觉不到*
  • 相关阅读:
    vb.net的数据类型
    PHP常用函数
    399. Evaluate Division
    329. Longest Increasing Path in a Matrix
    415. Add Strings
    463 Island Perimeter
    400. Nth Digit
    401. Binary Watch
    391. Perfect Rectangle
    406. Queue Reconstruction by Height
  • 原文地址:https://www.cnblogs.com/jevious/p/11278445.html
Copyright © 2011-2022 走看看