我有一些python代码,包含如下单元测试:
1 2 3 4 5 6 7 8 9 10 | 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) |
但当我运行这个,我得到错误:
1 2 3 4 | 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新手,所以如果我在这里漏掉了一些东西,我很抱歉,但就我所知,我在调用函数时只传入了两个参数:
有人能告诉我为什么它认为我传入了3个参数吗?
您忘记在
@classmethod和@staticmethod对于初学者的意义是什么?
Python中的@staticmethod和@classmethod有什么区别?
前面已经提到过,但是我的回答是"您的方法附近应该是静态的"。我不传递self,而是使用@staticmethod装饰器将方法设置为静态。这是给定的事实,通过自我没有任何好处。更重要的是,如果您将self作为参数传递,声纳Python Lint组合之类的质量检查器将把它标记为"应该是静态的"。这是我经常忘记的(Module function vs . staticmethod vs . classmethod vs . no decorator:哪种习惯用法更符合python风格?)
另外,我建议将margin作为一个变量传递,而不是像我现在想象的那样,将它作为一个全局变量。
任何类方法中的第一个变量都是对类实例的引用。您的方法期望有两个变量:
从Python文档的类,第二段:
the method function is declared with an explicit first argument
representing the object, which is provided implicitly by the call