class Sequence:
TranscriptionTable = {
"A":"U",
"T":"A",
"C":"G",
"G":"C"
}
def __init__(self, seqstring):
self.seqstring = seqstring.upper()
def transcription(self):
tt = ""
for x in self.seqstring:
if x in 'ATGC':
tt += self.TranscriptionTable[x]
return tt
DangerousVirus = Sequence('atggagagccttgttcttggtgtcaa')
print(DangerousVirus.transcription())
嗨,
我只想澄清一下数据是如何在类中流动的。例如,DangerousVirus = Sequence('atggagagccttgttcttggtgtcaa')中的数据是self还是seqstring?
当()中只有一个变量时,init如何才能有两个变量,我对此感到困惑。这不意味着只有self包含序列和seqstring是空的吗?
谢谢你的帮助!
发布于 2017-02-22 11:45:54
self
是对正在初始化的序列的引用。数据字符串以seqstring
的形式传递。您可以通过添加一行来打印它来看到这一点:
print(seqstring)
发布于 2017-02-22 11:53:11
__init__
方法确实有两个参数,但是一旦创建了实例,self
参数就被“绑定”到实例(__init__
成为实例的一个所谓的绑定方法),因此不必再指定实例本身。如果像这样调用类中的未绑定__init__
函数
Sequence.__init__(instance, seqstring)
您确实必须显式地指定实例。self
这个名字只是一个约定,它可以是定义中的任何东西。请看一看关于实例方法的教程部分,其中解释了这一点。
发布于 2017-02-22 11:59:38
正如其他答案所述,self
arg将自动传递给方法调用。因此,必须将其作为第一个arg包含在方法定义中,但不能将其包含在方法调用中。
但是,不需要为此定义一个类,一个简单的函数就足够了。你可以使用内置的str.translate
方法来非常有效地执行转录。对于大型序列,这比在transcription
方法中使用Python循环要快得多,因为大部分工作是由编译后的代码完成的,因此它的运行速度与用C编写的速度一样快,而不是用Python编写的。
trans_table = str.maketrans('ATCG', 'UAGC')
def transcribe(seq):
seq = seq.upper()
return seq.translate(trans_table)
seq = 'atggagagccttgttcttggtgtcaa'
print(transcribe(seq))
输出
UACCUCUCGGAACAAGAACCACAGUU
正如文档中所提到的,任何不在翻译表中的字符都将在输出字符串中保持不变。例如,
print('abcdABCD'.translate(trans_table))
输出
abcdUBGD
https://stackoverflow.com/questions/42390399
复制相似问题