Python 课堂上的相似方法

Python 课堂上的相似方法,python,methods,Python,Methods,我想在类中创建两个非常相似的方法 方法中唯一的区别是将元素添加到列表中,其他代码保持不变 class Test: a = [] def test1(self): ... self.a.append('test1') ... def test2(self): ... self.insert(0, 'test2') ... def compute(self):

我想在类中创建两个非常相似的方法

方法中唯一的区别是将元素添加到
列表中,其他代码保持不变

class Test:
    a = []
    def test1(self):
        ...
        self.a.append('test1')
        ...

    def test2(self):
        ...
        self.insert(0, 'test2')
        ...

    def compute(self):
        while not self.is_answer:
            node = self.visited[0]
            for operator in self.order:
                next_node = node.next_node(operator)
                if (next_node and next_node not in self.computed
                        and next_node not in self.visited):
                    if next_node.check_answer():
                        self.is_answer = True
                        print('Answer found')
                        break
                    else:
                        self.visited.insert(0, next_node) <--- here I want change methods
            self.computed.append(self.visited.pop(0))
            self.depth += 1
类测试:
a=[]
def测试1(自我):
...
self.a.append('test1')
...
def测试2(自我):
...
self.insert(0,“test2”)
...
def计算(自我):
虽然不是self.is_回答:
节点=自访问[0]
对于自动排序的操作员:
下一个节点=节点。下一个节点(运算符)
if(next_节点和next_节点不在self.computed中
下一个_节点不在self.visted中):
如果是下一个节点,请检查\u answer():
self.is_答案=真
打印('找到答案')
打破
其他:

self.visted.insert(0,next_node)我不知道您的确切代码是什么样子,但您可以执行以下操作:

class Test:
   a = []
   def test1(self):
       self._similar_code()
       self.a.append('test1')

   def test2(self):
       self._similar_code()
       self.insert(0, 'test2')

   def _similar_code(self):
       pass

编辑

def compute(self, option):
    while not self.is_answer:
        node = self.visited[0]
        for operator in self.order:
            next_node = node.next_node(operator)
            if next_node and next_node not in self.computed and next_node not in self.visited:
                if next_node.check_answer():
                    self.is_answer = True
                    print('Answer found')
                    break
                else:
                    if (option):
                        self.visited.insert(0, next_node)
                    else:
                        self.visited.append(next_node)
        self.computed.append(self.visited.pop(0))
        self.depth += 1

在类中为所有逻辑创建一个方法,而不在列表中插入。使用前导下划线命名,因为它应该被视为私有的

def _process (self):
    ...
    ...
然后:


如果您需要在插入之前和之后执行操作,请创建两个新方法。

self.insert(0,'test2')
是打字错误吗?很难用这个小例子来说明问题,我不认为把它们分开有什么问题,除非这些方法是相对实质性的,并且在一个小细节上有所不同。我已经更新了我的问题,这对你有帮助吗?是的,它是有效的,但对于许多方法来说,如果没有其他方法,这一过程会很长。有没有办法在没有“if”的情况下将此方法作为参数传递?
compute()
方法调用其他两种方法,因此不清楚“方法中的唯一差异”是什么意思。请回答您的问题,并尝试更清楚地解释您想要什么。此方法嵌套了一些循环和ifs。我添加了有问题的示例。
def _process (self):
    ...
    ...
def test1(self):
    self._process()
    self.a.append('test1')

def test2(self):
    self._process()
    self.insert(0, 'test2')