如何在python中生成运行时类
我想生成一组方法相同但属性不同的类。例如如何在python中生成运行时类,python,python-3.x,Python,Python 3.x,我想生成一组方法相同但属性不同的类。例如 A类: 名称='1' def f(自我): 打印('调用') B类 名称='2' def f(自我): 打印('调用') C类 名称='3' def f(自我): 打印('调用') 服务器。注册\u处理程序\u类(A) 服务器。注册\u处理程序\u类(B) server.register\u handler\u类(C) name的值从xx.conf文件加载。 如何做到这一点?我需要元类还是新建?否,您需要类型和全局: new_class_names =
A类:
名称='1'
def f(自我):
打印('调用')
B类
名称='2'
def f(自我):
打印('调用')
C类
名称='3'
def f(自我):
打印('调用')
服务器。注册\u处理程序\u类(A)
服务器。注册\u处理程序\u类(B)
server.register\u handler\u类(C)
name
的值从xx.conf
文件加载。
如何做到这一点?我需要
元类
还是新建
?否,您需要类型
和全局
:
new_class_names = ['A', 'B', 'C']
def new_class_init(self):
print(f'{self} was called.')
for class_name in new_class_names:
globals()[class_name] = type(class_name, (), {'__init__': new_class_init}
type
可以是:name
、base
和dict
以返回新类
name
是新类的名称,base
atuple
包含其所有基类和dict
adict
,其中键值对表示方法名称和实际函数,以绑定为新类应具有的方法
当然,要以编程方式将它们添加到全局名称空间,我们可以通过调用
globals
IIUC来引用全局dict
,如果您在执行它们时通过\uuu
预先附加变量名,类的名称将自动附加到类的各个变量的开头。因此,当通过类实例访问变量时,变量将变成\u A\u name
,\u B\u name
和\u C\u name
。这允许您使用相同的名称,而不会遇到名称冲突的问题。你可以读我的答案。我不知道这是不是你的意思
方法也可以这样做:\uf
因此,您可以使用
class A:
__name = '1'
def f(self):
print('call')
class B
__name = '2'
def f(self):
print('call')
class C
__name = '3'
def f(self):
print('call')
否,
name
由第三方服务器使用。注册\u handler\u class()
。我不能改变它。无论如何,谢谢你的把戏。