个人网站的建设与管理,网站网页设计的意义,软文推广文章,免费开发游戏的软件1、python中一切都是对象#xff0c;类也不例外#xff0c;type是object的子类#xff0c;是创建类的类。
如何动态的创建一个类#xff1f; 用脚丫子创建 用脑子创建 不会 不知道什么事动态类
大家可能会有一堆的疑惑#xff0c;是的我也是有很多疑惑那让我们一起来探个…1、python中一切都是对象类也不例外type是object的子类是创建类的类。
如何动态的创建一个类 用脚丫子创建 用脑子创建 不会 不知道什么事动态类
大家可能会有一堆的疑惑是的我也是有很多疑惑那让我们一起来探个究竟请看如下的例子
def create_cls(class_name):if classname app:class App:name abcdef __str__(self):retuen appreturn Appelse classname web:class Web:def __str__(self):return webreturn Webif __name__ __main__:meclass create_cls(web)obj meclass() # 这样我们就实现了动态的创建类
# 通过在函数create_cls中输入不同的class_name 来创建不同的类print(obj)
当然以上的方法虽然能实现我们的目的但是看起来很Low对不对 是的糟糕透了 看起来还可以嘛 非常不错了 哈哈哈 那么还有更好的方法吗让我们一起来探索一下。
2、本文第一点中提到type是创建类的类那么让我们看一下type是怎么动态创建类的 这里提示一下当我们想了解python的类或函数用法时第一选择就是用pyCharm中的Ctrl鼠标点击类或函数进行查看查看注释去了解类的用法和作用。实在看不懂在百度呗 1先查看type下__init__中的注释 2上手
# App type(App, (), {})
# 参数解析
# 1、第一个参数是类的名字
# 2、第二个参数是tuple类型是我们创建的这个类所要继承的基类这里没有要继承的所以为空
# 3、第三个参数是dict类型是所创建类的属性这里我们没有属性留空
if __name__ __main__:App type(App, (), {})mecls App()print(mecls) # 打印后看到是main模块下的App类扩展,添加一个属性等同于第一点中的App下的nameApp type(App, (), {name: abc})mecls App()print(mecls.name) # 打印name属性 3疑问来了这样创建的类怎么给他添加函数呢 请看下边。。。。 def first:return my name is firstif __name__ __main__:App type(App, (), {name: abc, first: first}) # 注意这里是函数的名称mecls App()print(mecls.first()) # 打印调用的函数返回 my name is first4那么我想继承其他类的该怎么操作 def first:return my name is first#创建基类
class Basedef zeroreturn I am Baseif __name__ __main__:App type(App, (Base, ), {name: abc, first: first}) # 将基类名称放到括号中并且记得加逗号因为是元组mecls App()print(mecls.zero()) # 打印调用的函数返回 I am Base3、什么是元类如何自定义元类
1元类是一种创建类的类我们的type就是元类。type class 对象 class也是对象。
待补充。。。。。