TypeError: object .__ new __ () не принимает параметров при использовании наследования - PullRequest
1 голос
/ 01 марта 2011

Эй, Мне трудно реализовать что-то, что не должно быть трудным. Я читал много постов, и до сих пор не могу понять это, хотя, вероятно, на него есть ответ, и я просто не понимаю ответ: /

Итак, у меня есть класс, определяющий файл алгоритма three_dpll.py в логике / и пару вспомогательных функций

class three_dpll(object):
    ...
    def __extend__(self, symbol, value, mod):
            """ __extend__(symbol, value) - extends the model
            ...
            """

    def three_dpll(self, formula, symbols, mod):
            """ three_dpll(formula, symbols, mod) - calculates 3-DPLL \n
            NOTE: This algorithm should not be overwritten in any derived class!!"""
            ...
            # find unit clause
            curr_data = self.__find_unit_clause__(formula, mod)
            current_symbol = curr_data[0]
            current_symbol_set.add(current_symbol)
            current_value = curr_data[1]
            if current_symbol != None: 
                return three_dpll(formula, symbols - current_symbol_set,
                                  self.__extend__(current_symbol, current_value, mod))
            ...

и логика, которая должна реализовывать алгоритм для определенной логики, где я мог бы переопределить определенные методы, например, из logics.three_dpll.py (или любой другой вспомогательной функции в этом отношении)

from three_dpll import three_dpll
class kleene_logic(three_dpll):
    """ This is the definition of Kleene logic """
    pass

и теперь вызываем его из функции в другом файле:

* * 1010

Я получаю ошибку:

in three_dpll
    self.__extend__(current_symbol, current_value, mod)) TypeError: object.__new__() takes no parameters

Есть идеи, как это исправить?

1 Ответ

3 голосов
/ 01 марта 2011

В вашем классе three_dpll также есть метод three_dpll.Когда вы

return three_dpll(...)

, вы создаете экземпляр этого класса (вместо вызова метода, что, вероятно, вы и хотели).В классе нет функции __init__(), которая могла бы обрабатывать аргументы, которые вы предоставляете.Это то, что говорит вам сообщение об ошибке.

Вероятно, вам нужно что-то вроде

return self.three_dpll(...)

, которое будет вызывать метод.Не уверен, что это решит твою проблему, но это должно кое-что объяснить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...