python - python中的类和方法

标签 python class function testing python-2.7

import unittest
from paycheck import with_checker

class TestStrings(unittest.TestCase):        
    @with_checker([int])
    def test_sort(self, list_of_ints):
        self.assertTrue(isinstance(list_of_ints, list))
        self.assertTrue(len(list_of_ints) == len(qsort(list_of_ints)))
        self.assertTrue(False)


if __name__ == '__main__':
    unittest.main()

    def qsort (list):
        if list == []:
            return []
        else:
            pivot = list [0]
            lesser = qsort([x for x in list[1:] if x<pivot])
            greater = qsort([x for x in list[1:] if x>=pivot])
            return lesser + [pivot] + greater

这给了我 global name qsort not defined(即使我在同一个类中有它)。这里有什么问题?我想这很简单,但我对 Python 还不是很熟悉。

最佳答案

看起来您在定义函数之前正在运行测试。 Python 中的函数定义是可执行语句,与其他任何语句一样,并按照它们遇到的顺序执行。由于您在定义 qsort 之前调用了 unittest.main(),因此在运行测试时未定义 qsort。将 unittest.main() 调用移到 def qsort block 之后。

当你这样做时,最好不要将 def 放在 if __name__=="__main__" block 中。通常 if block 将是程序中的最后一位。就这样

def qsort (list):
    if list == []:
        return []
    else:
        pivot = list [0]
        lesser = qsort([x for x in list[1:] if x<pivot])
        greater = qsort([x for x in list[1:] if x>=pivot])
        return lesser + [pivot] + greater

if __name__ == '__main__':
    unittest.main()

另请注意,qsort 与任何事物都不“属于同一类”。它不属于任何类别。这只是一个函数。

关于python - python中的类和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11220846/

相关文章:

Go 中的函数包装器

javascript - Jasmine 测试: how to call through function that is called in tested function?

python - 使用 Python CSV 模块读取带有 BOM 的 UTF-8 会导致不需要的额外字符

python - 使用 dictwriter 覆盖同一 csv 文件中的行

python - Pocketsphinx python 在迭代音频时不返回最后一句话

python - 如何建立卡方分布表

ruby-on-rails - 在 Rails 控制台中定义一个类(实例)方法

c++ - 调用汽车类时的极端负数

php - 使用数据库类在 php 中连接 2 个服务器

c - 函数声明和定义 C - 参数定义为 pascal : what should it be?