返回类型'nonetype'的方法不输入''dict'

时间:2013-09-24 14:21:52

标签: python oop

我有一个基本上这样做的程序:

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类型,女巫是我期待的?

3 个答案:

答案 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