“module”对象不可调用 - Bio.IUPAC

4

当我尝试时,

from Bio.Alphabet import IUPAC
from Bio import Seq
my_prot = Seq("AGTACACTGGT", IUPAC.protein)

为什么我会遇到以下错误:
TypeError: 'module' object is not callable

PS: 这是 BioPython 的菜谱中的一个例子。

2个回答

8
在BioPython源代码中,“Seq”类位于路径“/Seq/Seq.py”中的文件“Seq.py”中。
意思是...您需要导入名为“Seq”的文件(即“模块”),然后在该“模块”“Seq”中调用“Seq”类。
所以请尝试这样做:
from Bio.Alphabet import IUPAC
from Bio import Seq
my_prot=Seq.Seq("AGTACACTGGT",IUPAC.protein)

如果你在Python中对于你正在导入和调用的内容感到困惑,你可以这样做:

import Bio.Seq
print type(Bio.Seq)
>>> <type 'module'>
print type(Bio.Seq.Seq)
>>> <type 'classobj'>

2
通常情况下,当您看到这种模式时,库的作者可能希望您编写 from Bio.Seq import Seq。然后像在您的问题中一样使用 Seq 类。 - Wesley
请注意,自从这个提交以来,Seq已成为新式类。因此现在print type(Bio.Seq.Seq)将返回<type'type'> - BioGeek

1

Ben给出了一个很清晰的答案,解释了问题。我猜你复制了错误的例子。

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_prot = Seq("AGTACACTGGT", IUPAC.protein)
>>> my_prot
Seq('AGTACACTGGT', IUPACProtein())
>>> my_prot.alphabet
IUPACProtein()

至少目前它是这样说的 http://www.biopython.org/DIST/docs/tutorial/Tutorial.html

请注意,如果Biopython在模块中使用seq(小写)并使用Seq(标题大小写)用于类,就可以避免混淆的原因 - 这现在是Python推荐的做法,请参见http://www.python.org/dev/peps/pep-0008/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接