You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:09:04