在用type创建类的时候遇到问题

2012-01-06 14:38:16 +08:00
 nttdocomo
在__init__方法里需要调用父类的__init__方法,但super的第一个参数要求的是当前类,但调用type时当前类其实还没有创建,这个怎么办?


>>> def __init__(self):
... super(Hello, self).__init__(*args, **kwargs) #在这里其实Hello还没创建,调用肯定是失败的!
... self.message = 'Hello World'
...
>>> def say_hello(self):
... print self.message
...
>>> attrs = {'__init__': __init__, 'say_hello': say_hello}
>>> bases = (object,)
>>> Hello = type('Hello', bases, attrs)
4531 次点击
所在节点    Google App Engine
3 条回复
nttdocomo
2012-01-06 14:59:29 +08:00
找到解决办法了,先临时建一个类:
class Base(object):
super(Hello, self).__init__(*args, **kwargs) #在这里其实Hello还没创建,调用肯定是失败的!
self.message = 'Hello World'

然后
Hello = type('Hello', Base, attrs)

就OK了!
keakon
2012-01-06 15:15:35 +08:00
你直接按第一种写法就行了,函数执行时才会去查找Hello,这时候你早就定义好了
nttdocomo
2012-01-07 08:39:43 +08:00
@keakon 但这里类名不是固定的,是按照不同的model类生成的,而且我的回复里写得也有问题,正确的应该是这样:
class Base(object):
def __init__(self, *args, **kwargs):
super(Base, self).__init__(*args, **kwargs) #在这里其实Hello还没创建,调用肯定是失败的!
self.message = 'Hello World'

然后
Hello = type('Hello', Base, attrs) #Hello可能不一定叫这个名字

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/25086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX