这是一个包含重现我的错误的代码的代码段。为什么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分钟而对我来说没有任何意义。
答案 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))