进击の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
对吧,这样就达到了我们的目的
有什么用呢??
你现在可能感受不到
但是,要记住这种使用方法
到某个时刻
你会突然发现这个东西的奥妙!