gpt4 book ai didi

python - 从类 __init__() 调用静态方法导致 "takes 1 positional argument but 2 were given"TypeError

转载 作者:行者123 更新时间:2023-12-01 23:45:53 26 4
gpt4 key购买 nike

我用静态方法创建了一个类:

class DetfileDetector(Detector):
def __init__(self, file_path, **kwargs):
super().__init__(**kwargs)
self.detections = self.parse_detfile(file_path)

@staticmethod
def parse_detfile(file_path):
#do somthing with file_path

当我在没有实例化类的情况下调用 parse_defile 时,我得到了预期的结果

DetfileDetector.parse_detfile('foo.txt')

但是,当我从 init() 函数调用它时,出现错误:

TypeError: parse_detfile() takes 1 positional argument but 2 weregiven

我假设意思是“self”也传递给了静态方法,但这是一个静态方法,因此我预计 self 不会被传递。

我尝试修复的是将“file_path”设置为默认为 None 的可选参数,但我得到了一个 TypeEroor

TypeError: parse_detfile() got multiple values for argument 'file_path'

如果有人能告诉我如何以正确的方式编写它,我将不胜感激。

编辑:感谢您的回答,添加更多信息:

  • 我现在看到,当我从 VScode(版本 1.50.0-insider)的“python 交互式 shell”运行它时它失败了,但是从命令行或没有交互式 shell 运行它时通过了。我会将此问题报告给 VScode 开发人员。
  • 我正在使用 python 3.7.7

Edit2:Detector类的内容

class Detector:
def __init__(self, **kwargs):
self.every = kwargs.pop('every', 1)
self.min_confidence = kwargs.pop('min_confidence', .8)
self.min_wh = kwargs.pop('min_wh', 5)
self.min_ar = kwargs.pop('min_ar', .1)
self.sensor_noise_cov = np.square(np.diag(kwargs.pop('sensor_noise', [10, 10, 1, 10])))
self.classes = object_classes(kwargs.pop('cars_only', True))

最佳答案

您的代码实际上正确

我用 Python 3.8 测试了它,没有发现任何问题。

您可以使用类或该类的实例调用静态方法。

参见此处:https://docs.python.org/3/library/functions.html#staticmethod

即使在旧版本的 Python 中它也是这样工作的,我一直检查到 Python 2.7。因此,您会收到该错误的原因有点神秘。

也许在您的代码中提供更多上下文?

关于python - 从类 __init__() 调用静态方法导致 "takes 1 positional argument but 2 were given"TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64192960/

26 4 0
文章推荐: typescript - Typeguard 不会缩小类型
文章推荐: JAVA - 如果条件在参数上不能正常工作
文章推荐: angular - 错误 :Property 'map' does not exist on type 'Observable