如何导入模块?

时间:2012-02-29 23:36:36

标签: python import

/projects/mymath$ ls
__init__.py  __init__.pyc  mymath.py  mymath.pyc  tests

tests 目录下

/projects/mymath/tests/features$ ls
steps.py  steps.pyc  zero.feature

我尝试导入我的阶乘函数

sys.path.insert(0,"../../")
#import mymath
from mymath.MyMath import factorial

但它说没有名为MyMath的模块。

这是我的虚拟 MyMath 类。

class MyMath(object):

        def factorial(self, number):
                if n <= 1:
                        return 1
                else:
                        return n * factorial(n-1)

那有什么不对?谢谢。这是一个很好的做法(编辑sys路径吗?)

这将有效import mymath

4 个答案:

答案 0 :(得分:4)

您无法从课程中导入功能。您想要导入类本身(import mymath.mymath.MyMath)或将函数放在模块级别并执行import mymath.mymath.factorial

答案 1 :(得分:2)

据我所知,这是对的。没有名为mymath.MyMath的模块。虽然有一个名为mymath.mymath的模块......

明确地说,当您创建文件夹并在其中放入__init__.py文件时,您已经创建了一个包。如果您的__init__.py文件为空,那么您仍然必须显式导入包中的模块。因此,您必须import mymath.mymathmymath模块导入您的命名空间。然后,您可以通过mymath.mymath.MyMath访问所需内容,依此类推。如果要直接导入该类,则必须执行以下操作:

from mymath.mymath import MyMath

正如其他人已经解释过的那样,您无法从类中导入方法。你必须导入整个班级。

答案 2 :(得分:2)

一个问题是导入错误。你有一个名为mymath的软件包,其中有一个名为mymath的模块。在那个模块是一个类。这是你可以导入的最多:

>>> from mymath.mymath import MyMath
>>> myMathObject = MyMath()
>>> myMathObject.factorial(5)
120

另一个问题是你对factorial的第二次调用应该在self上调用factorial,否则它将尝试将其作为模块中的自由函数进行查找,这将无效。试试吧!

答案 3 :(得分:0)

  

这是我的虚拟MyMath类。

Python不是Java;这里的类不是任何组织单元,而只是数据类型的蓝图。没有理由在这里定义一个类(无论如何都必须实例化);只需将factorial函数定义为函数。