Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中生成运行时类_Python_Python 3.x - Fatal编程技术网

如何在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
a
tuple
包含其所有基类和
dict
a
dict
,其中键值对表示方法名称和实际函数,以绑定为新类应具有的方法


当然,要以编程方式将它们添加到全局名称空间,我们可以通过调用
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()
。我不能改变它。无论如何,谢谢你的把戏。