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))输出
abcdUBGDhttps://stackoverflow.com/questions/42390399
复制相似问题