Подобный метод в классе - PullRequest
       5

Подобный метод в классе

0 голосов
/ 08 ноября 2018

Я хочу создать два очень похожих метода в классе.

Единственная разница в методах - это способ добавления элемента в list, другой код остается прежним.

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

Есть ли более чистый способ, чем копировать код вставки?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Создайте метод в классе для всей логики, не вставляя в список. Назовите его начальным подчеркиванием, так как оно должно считаться частным.

def _process (self):
    ...
    ...

Тогда:

def test1(self):
    self._process()
    self.a.append('test1')

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

Если вам нужно что-то сделать до и после вставки, создайте два новых метода.

0 голосов
/ 08 ноября 2018

Я не знаю, как выглядит ваш точный код, но вы могли бы сделать что-то вроде:

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

или

class Test:
   a = []
   def test(self, option):
       codetoexecute
       if (option):
           self.a.append('test1')
       else:
           self.insert(0, 'test2')

Редактировать

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...