相同类名比较多,想用python 循环创建类名,并创建对象使用,遇到一个问题

要创建 3 个类分别是:P_a, P_b, P_c

3 个类有相同的方法名是:Na

3 个类对应的方法的内容是: tt = 1, tt = 2 ,tt = 3

对应的方法的值分别是:P_a.Na = 1 , P_b.Na = 2, P_c.Na = 3

cl = ['a','b','c']
lll = ['1','2','3']
num = len(lll)

class Base():
    def Na(self):
        tt = ''
        return tt
for cls,i in zip(cl,range(num)):
    #print(cls,i)
    class TEMP(Base):
        def Na(self): #因为是参考别人代码,觉得这里用到的是类的方法的重载
            #print(cls,i) 
            tt = lll[i]
            return tt
    TEMP.__name__ = f'Pa_{cls}'
    TEMP.__qualname__ = f'Pa_{cls}'
    globals()['Pa_'+cls] = TEMP
f = Pa_a() #f = Pa_b(),f = Pa_c(),不论创建那个对象,f.Na ()的值是3
print (f.Na ()) #打印方法的值永远是 3,要求是P_a.Na = 1 , P_b.Na = 2, P_c.Na = 3
print(type(Pa_a()).name)
#下面代码可以打印出类名,说明创建成功了,只是去匹配方法值的时候存在一些逻辑关系。
print(type(Pa_a()).__name__)
print(type(Pa_b()).__name__)
print(type(Pa_c()).__name__)
Jason990420
最佳答案

重复定义一个类, 还是只有一个, 不会变成几个, 以下使用函数返回一个类, 可以用来重复定义.

class Base():

    def Na(self):
        tt = ''
        return tt

def create_class(name, value):
    class TEMP(Base):
        def Na(self):
            tt = value
            return tt
    TEMP.__name__ = f'Pa_{name}'
    TEMP.__qualname__ = f'Pa_{name}'
    return TEMP

cl = ['a','b','c']

for value, name in enumerate(cl):
    globals()[f'Pa_{name}'] = create_class(name, value+1)

for cls in (Pa_a, Pa_b, Pa_c):
    print(cls().Na())
1
2
3
1年前 评论
kery_65 (楼主) 1年前
讨论数量: 4
Jason990420
  1. 代码格式错误, 缩格不对, 请参考以下内容, 再重新编辑内容.

代码高亮

```python

你的代码

```

cl = ['a','b','c']
lll = ['1','2','3']
num = len(lll)

class Base():
    def Na(self):
        tt = ''
        return tt

for cls,i in zip(cl,range(num)):

    #print(cls,i)

    class TEMP(Base):
        def Na(self):
            #print(cls,i)
            tt = lll[i]
            return tt

    TEMP.name = f'Pa_{cls}'
    TEMP.qualname = f'Pa_{cls}'
    globals()['Pa_'+cls] = TEMP
    f = Pa_a()
    print (f.Na()) #打印方法的值永远是 3
    # print(type(Pa_a()).name)

打印方法的值永远是 3 ?

1
2
3
1年前 评论
kery_65 (楼主) 1年前
Jason990420

重复定义一个类, 还是只有一个, 不会变成几个, 以下使用函数返回一个类, 可以用来重复定义.

class Base():

    def Na(self):
        tt = ''
        return tt

def create_class(name, value):
    class TEMP(Base):
        def Na(self):
            tt = value
            return tt
    TEMP.__name__ = f'Pa_{name}'
    TEMP.__qualname__ = f'Pa_{name}'
    return TEMP

cl = ['a','b','c']

for value, name in enumerate(cl):
    globals()[f'Pa_{name}'] = create_class(name, value+1)

for cls in (Pa_a, Pa_b, Pa_c):
    print(cls().Na())
1
2
3
1年前 评论
kery_65 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!