我有一个基本上这样做的程序:
class principal():
def execute(self):
x = calculate()
final = x.vars1()
print str(type(final))
class calculate():
def __init__(self):
t = self.vars1()
def vars1(self):
a = {}
for i in xrange(0,10):
a[i] = i*10
self.result(a)
def result(self,r):
return r
m = principal()
x = m.execute()
我的回复是“类型'无类型'” 为什么不回归dict类型,女巫是我期待的?
答案 0 :(得分:1)
您的方法没有返回,因此返回None
。
将vars1
方法更改为:
def vars1(self):
a = {}
for i in xrange(0,10):
a[i] = i*10
return a
您无法在尝试时调用方法来执行返回操作。 return语句允许您将对象返回给函数的调用者。您的函数result
基本上将参数r
返回给方法vars1
。但是vars1
除非你在这里输入一个返回语句,否则不会返回任何内容。
答案 1 :(得分:1)
你必须返回一个字典,你的函数没有返回任何值。这有时被称为从函数结束时掉落。每种语言对待的方式都不同,但最重要的是要明确。例如,在函数vars1
中,您应该在末尾添加return
语句:
def vars1(self):
a = {}
for i in xrange(0,10):
a[i] = i*10
return self.result(a)
目前,vars1(self)
“没有返回值”,Python实际上会返回NoneType
:
return语句返回一个函数的值。不带表达式参数的return返回None。从函数末尾开始也会返回None。
这是doc
答案 2 :(得分:1)
您没有从vars1
方法返回任何内容。您需要return a
而不是self.result(a)
。
将另一个函数调用到return
并不会像您认为的那样工作。你的result
方法基本上是无操作的;它只是将其输入返回到任何调用它。它不会神奇地从堆栈上的其他方法返回该输入。您的vars1
方法没有return
语句,因此它不会返回任何内容。
目前您的流程看起来有点像这样:
m.execute()
creates x
-> calls x.vars1()
creates a
-> calls x.result(a)
-> returns a
<-
discards the return value of x.result()
returns None
<-
assigns the return value of x.vars1() to final
prints str(type(final)), which is None
你想要的是它看起来像这样:
m.execute()
creates x
-> calls x.vars1()
creates a
returns a
<-
assigns the return value of x.vars1() to final
prints str(type(final)), which is a