/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
答案 0 :(得分:4)
您无法从课程中导入功能。您想要导入类本身(import mymath.mymath.MyMath
)或将函数放在模块级别并执行import mymath.mymath.factorial
。
答案 1 :(得分:2)
据我所知,这是对的。没有名为mymath.MyMath
的模块。虽然有一个名为mymath.mymath
的模块......
明确地说,当您创建文件夹并在其中放入__init__.py
文件时,您已经创建了一个包。如果您的__init__.py
文件为空,那么您仍然必须显式导入包中的模块。因此,您必须import mymath.mymath
将mymath
模块导入您的命名空间。然后,您可以通过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
函数定义为函数。