Python说我向我的函数传递了太多参数?

7 浏览
0 Comments

Python说我向我的函数传递了太多参数?

我有一些包含单元测试的Python代码,如下所示:

class SunCalcTestCases(unittest.TestCase):
     """Tests for `suncalc.py`."""
     def near(val1, val2):
         return abs(val1 - val2) < (margin or 1E-15)
     def test_getPositions(self):
         """Get sun positions correctly"""
         sunPos = suncalc.getPosition(self.date, self.lat, self.lng)
         az = sunPos["azimuth"]
         res = self.near(az, -2.5003175907168385) 

但当我运行这个代码时,我收到了错误信息:

Traceback (most recent call last):
   File "test.py", line 64, in test_getPositions
     res = self.near(az, -2.5003175907168385)
TypeError: near() takes exactly 2 arguments (3 given)

我对Python还不太熟悉,所以如果我漏掉了什么,请谅解,但据我所知,当我调用函数时,我只传入了两个参数:self.near(az, -2.5003175907168385)

有人可以告诉我为什么它认为我传入了3个参数吗?

0
0 Comments

在上述问题中,出现了“Python saying I'm passing in too many parameters to my function”的错误。这个错误的原因是方法的第一个变量是对类实例的引用。在这个例子中,方法期望两个变量val1val2,但是当调用self.near(val1, val2)时,实际上相当于用selfval1val2作为参数调用函数。

根据Python文档中关于类的部分的说明,方法函数声明时需要显式地声明第一个参数,该参数表示对象,而在调用时会隐式地提供。

解决这个问题的方法是,在定义方法时将第一个参数self加入到参数列表中,并在调用时省略这个参数。这样就可以保证方法正常运行,不再报错。

下面是修正后的代码:

class MyClass:
    def near(self, val1, val2):
        # method logic here
my_instance = MyClass()
my_instance.near(val1, val2)

通过这样的修正,near方法将能够正常运行,不再报告参数过多的错误。

0
0 Comments

在Python中,类的方法有三种类型:实例方法、类方法和静态方法。在实例方法中,必须显示地传递self作为第一个参数,表示该方法是与实例对象相关联的。然而,在某些情况下,可能会忘记在函数中传递self参数,导致出现错误提示"Python saying I'm passing in too many parameters to my function"。

解决这个问题的方法是在函数定义中添加self参数,并确保在调用函数时传递正确的参数数量。以下是一个示例代码:

class MyClass:
    def near(self, val1, val2):
        # do something with val1 and val2
obj = MyClass()
obj.near(1, 2)

在这个示例中,我们创建了一个名为MyClass的类,并定义了一个名为near的实例方法。在这个方法中,我们没有使用self参数,但是在函数定义中我们仍然需要将self作为参数传递进去。

这个问题的原因是忘记了在near函数中传递self参数。self参数是用来传递实例对象的引用,使得方法能够访问实例对象的属性和方法。

为了解决这个问题,我们需要在函数定义中添加self参数,并在调用函数时传递正确的参数数量。这样,Python就能正确地识别方法与实例对象的关联,避免出现"Python saying I'm passing in too many parameters to my function"的错误提示。

在Python中,self参数约定俗成的用法,并且在大多数情况下必须使用。它是Python的一种语法约定,用来指示方法与实例对象的关联。通过使用self参数,我们可以在方法中访问实例对象的属性和方法,使得类的方法能够正确地执行其功能。

总结起来,为了避免出现"Python saying I'm passing in too many parameters to my function"的错误提示,我们需要在类的实例方法中添加self参数,并在调用方法时传递正确的参数数量。这样,Python就能正确地识别方法与实例对象的关联,确保方法能够正确执行其功能。

0
0 Comments

问题原因:函数参数过多,导致传入参数过多。

解决方法:将方法声明为静态方法,并使用装饰器来实现。这样做的好处是不需要传入self参数。此外,如果传入self作为参数,像Sonar Python Lint这样的质量检查工具会标记为“应该是静态方法”。这是我经常忽略的一点。另外,我建议将margin作为变量传入,而不是将其作为全局变量。

代码示例:

@staticmethod
def your_method_near():
    # method code here
    pass
margin = 10
your_method_near(margin)

以上是关于Python函数参数过多的问题出现的原因以及解决方法。通过将方法声明为静态方法并使用装饰器来实现,可以避免传入过多的参数。此外,建议将margin作为变量传入,而不是将其作为全局变量。

0