如何使用exec()在函数中定义类

2024-04-28 12:16:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个冗长的、重复的代码,里面充满了类,每个类都做着几乎相同的事情,我试图做这样的事情来缩短它:

def newClass(cName, para):
    string = '''class '''+cName+'''(str):
    def __new__(cls, num): 
        return(str.__new__(cls, func('''+para+''')))'''
    exec(string)

但是新类既不是newClass的一部分,也不是自己定义的,如何使它创建新类,就好像它没有在函数中定义一样?如果这是不可能的,我如何才能做到这样,我可以这样做:

newClass('Fun', 'p')
newClass.Fun('inp')

编辑:我正在编写一个基本转换程序,希望能够完成python不喜欢的事情bin(a) + bin(b)。以下是我的一个类的简化版本:

class Bin(str):
    '''Binary (base 2) number'''
    def __new__(cls, num): 
        return(str.__new__(cls, baseconv(num, 2, '01')))
    def __int__(self): 
        return(intconv(self, 2, '01'))
    def __add__(a, b): 
        return(Bin(a.__int__() + b.__int__()))
    def __sub__(a, b): 
        return(Bin(a.__int__() - b.__int__()))
    ...

class Ter(str):
    '''Ternary (base 3) number'''
    def __new__(cls, num): 
        return(str.__new__(cls, baseconv(num, 3, '012')))
    def __int__(self): 
        return(intconv(self, 3, '012'))
    def __add__(a, b): 
        return(Ter(a.__int__() + b.__int__()))
    def __sub__(a, b): 
        return(Ter(a.__int__() - b.__int__()))
    ...

其中baseconvintconv是我前面定义的两个函数。你知道吗


Tags: selfnewreturnbin定义def事情num