为什么当我在 Python 类中定义本地函数时会出现"object has no attribute"错误?



我正在编写一个类,其中有一个带有局部参数的方法。

class GlobalAssign:
def __init__(self, seq1, seq2, d=-5, mismatch=-5, trans=-7):
self.seq1 = list(seq1)
self.seq2 = list(seq2)
self.mismatch = mismatch
self.d = d
self.trans = trans
def score(self, a, b):
# score for any pair of bases
pair = (str(a).capitalize(), str(b).capitalize())
if pair in {('A', 'G'), ('G', 'A'), ('C', 'T'), ('T', 'C')}:
return self.mismatch
if pair in {('A', 'C'), ('C', 'A'), ('T', 'G'), ('G', 'T'),
('A', 'T'), ('T', 'A'), ('C', 'G'), ('G', 'C')}:
return self.trans
elif a == '-' or b == '-':
return self.d

我在终端中运行以下代码:

In [62]: test = GlobalAssign('agcg','gtat')
In [63]: test.score('a','g')
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-63-f387aa9ccad8> in <module>
----> 1 test.score('a','g')
~/data/needleman.py in score(self, a, b)
11     def score(self, a, b):
12         # score for any pair of bases
---> 13         pair = (str(a).capitalize(), str(b).capitalize())
14         if pair in {('A', 'G'), ('G', 'A'), ('C', 'T'), ('T', 'C')}:
15             return self.mismatch
AttributeError: 'GlobalAssign' object has no attribute 'a'

I thinkab都是局部变量,所以我不需要写self。a。但它引发了这个错误,我有点困惑。已经被困了一段时间了。如果你能帮我解决这个问题,谢谢你。

我刚刚在本地运行你的代码,它正在工作;它给我的输出是-5。

我对你的代码做了一些调整,以便得到所有的情况:

class GlobalAssign:
def __init__(self, seq1, seq2, d=-5, mismatch=-5, trans=-7):
self.seq1 = list(seq1)
self.seq2 = list(seq2)
self.mismatch = mismatch
self.d = d
self.trans = trans
def score(self, a, b):
# score for any pair of bases
pair = (str(a).capitalize(), str(b).capitalize())
if pair in [('A', 'G'), ('G', 'A'), ('C', 'T'), ('T', 'C')]:
return self.mismatch
elif pair in [('A', 'C'), ('C', 'A'), ('T', 'G'), ('G', 'T'),
('A', 'T'), ('T', 'A'), ('C', 'G'), ('G', 'C')]:
return self.trans
elif a == '-' or b == '-':
return self.d
else:
print("Value not correct.")
return None

此外,我在score方法中去掉了括号{},代之以[]

如果这对你有帮助,请告诉我。

相关内容

最新更新