Неподдерживаемый тип операнда с использованием функции sum

1

Вот фрагмент, содержащий код, который воспроизводит мою ошибку. Почему функция sum передает экземпляр класса вместо числа в метод вычитания?

class my_class():
    def __init__(self):
        pass

    def __subtract (x,y, n=1):
        return (x - y)**n

    def num_generator(self, num):
        example_list = []
        for idx in range(num):
            example_list += [idx]

        expression = {y: sum(self.__subtract(x, y) for x in example_list) for y in range(min(example_list), max(example_list) + 1)}
        no_vals = max(expression.items(), key=operator.itemgetter(1))[0]
        return no_vals

chosen_no = 20
class_instance = my_class()
class_instance.num_generator(chosen_no)

ОШИБКА:

TypeError: unsupported operand type(s) for -: 'my_class' and 'int'

Я смотрю на это уже 20 минут, и для меня это бессмысленно.

Теги:
python-3.x
oop
runtime-error

1 ответ

3
Лучший ответ

в:

def __subtract (x,y, n=1):
    return (x - y)**n

поскольку __subtract является методом экземпляра, x представляет текущий объект в качестве первого аргумента (нет, self не является ключевым словом).

Аргумент по умолчанию делает его необнаружимым, что объясняет, что python не жалуется на количество аргументов. Когда вы звоните:

self.__subtract(x, y)

в вызове вы смещаете все аргументы, а y занимает n аргумент по умолчанию:

def __subtract (yourobject => x, x => y, y => n):

Ваш метод не требует состояния объекта, поэтому просто добавьте декоратор @staticmethod

@staticmethod
def __subtract (x,y, n=1):
    return (x - y)**n

как в сторону, замените громоздкий и нижеперечисленный код ниже:

    example_list = []
    for idx in range(num):
        example_list += [idx]

от

example_list = list(range(num))
  • 0
    Я забыл добавить себя ???? Хорошо, это действительно смущает. Спасибо, теперь работает как шарм.
  • 0
    @Qubix вы не используете себя в функции, хотя. Я бы сделал это staticmethod как рекомендует Жан-Франсуа. Дополнительная информация: stackoverflow.com/questions/136097/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню