使用sum函数的不支持的操作数类型

时间:2018-06-18 08:55:53

标签: python python-3.x oop runtime-error

这是一个包含重现我的错误的代码的代码段。为什么sum函数将一个类实例而不是一个数字传递给subtract方法?

options.add_experimental_option('prefs', {'intl.accept_languages': 'nl'})

错误:

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)

我现在已经盯着这看了20分钟而对我来说没有任何意义。

1 个答案:

答案 0 :(得分: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))