在运行时创建Python类的最不好的方法是什么?

时间:2012-02-10 20:47:29

标签: python class

我正在使用一个接受类作为输入的ORM,我需要能够为它提供一些动态生成的类。目前,我正在做这样一个人为的例子:

def make_cls(_param):
   def Cls(object):
       param = _param
   return Cls

A, B = map(make_cls, ['A', 'B'])

print A().foo
print B().foo

虽然这样可以正常工作,但感觉有些偏差:例如,两个类在repl上打印为<class '__main__.Cls'>。虽然名称问题不是什么大问题(我想我可以通过设置__name__来解决它),但我想知道是否还有其他我不知道的事情。 所以我的问题是:是否有更好的动态创建类的方法,或者我的示例已经很好了?

1 个答案:

答案 0 :(得分:10)

什么是课程?它只是type的一个实例。例如:

>>> A = type('A', (object,), {'s': 'i am a member', 'double_s': lambda self: self.s * 2})
>>> a = A()
>>> a
<__main__.A object at 0x01229F50>
>>> a.s
'i am a member'
>>> a.double_s()
'i am a memberi am a member'

来自doc

  

类型(名称,基数,字典)

     

返回一个新类型对象。这实际上是类声明的动态形式。