模块'对象不可调用 - Bio.IUPAC
当我尝试这样做时,
from Bio.Alphabet import IUPAC
from Bio import Seq
my_prot = Seq("AGTACACTGGT", IUPAC.protein)
为什么会遇到以下错误:
TypeError: 'module' object is not callable
附注:这是来自BioPython食谱的一个例子
2 个回答
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/
8
在BioPython的源代码中,“Seq”类位于文件“Seq.py”里,路径是“/Seq/Seq.py”。
这意味着……你需要导入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'>