Python类内调用同类已定义方法提示函数未定义如何解决
报错原因说明
该报错和你使用类实现有关,属于类方法调用的语法错误:
- 你在类内部定义的
reverse、complement都是实例方法,不属于全局作用域下的函数,直接写reverse(self.DNA)会去全局作用域查找对应函数,自然会抛出未定义的报错。 - 额外注意:你定义的
reverse方法本身没有设计入参,方法内部已经默认读取实例自身的self.DNA属性做反转,调用时传入self.DNA参数反而会触发参数不匹配的报错。
其他隐藏问题
你当前的complement方法逻辑存在错误:循环中每次替换都使用原始的self.DNA操作,最终只会生效最后一个碱基C→G的替换规则,其余替换都会被覆盖,无法得到正确的互补序列。
修复后完整代码
class Sequence: def __init__(self, DNA): ''' Stores original sequence ''' self.DNA = DNA def length(self): ''' That returns the length of the original sequence ''' return len(self.DNA) def complement(self, seq=None): ''' Return the complement of a seq given, use self.DNA if no seq passed ''' complement_dict = {"A": "T", "T": "A", "G": "C", "C": "G"} target_seq = seq if seq is not None else self.DNA # 逐个碱基替换,避免覆盖问题 complement_seq = ''.join([complement_dict[base] for base in target_seq]) return complement_seq def reverse(self, seq=None): ''' Reverse a given seq, use self.DNA if no seq passed ''' target_seq = seq if seq is not None else self.DNA reverse_seq = target_seq[::-1] return reverse_seq def reverse_and_complement(self): ''' Do the reverse first and then the complement calling the function reverse() and complement() ''' # 类内实例方法通过self调用 reversed_seq = self.reverse() reversed_complement = self.complement(reversed_seq) return reversed_complement
调用示例
# 测试用例:原序列ATCG,反转后是GCTA,互补后是CGAT s = Sequence("ATCG") print(s.reverse_and_complement()) # 输出CGAT
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

