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

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

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


有什么用呢??

你现在可能感受不到

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

到某个时刻

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


*这个是真的很重要*
*但你现在感觉不到*
posted @ 2019-07-27 00:00  吃夏天的西瓜  阅读(448)  评论(0编辑  收藏  举报