首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从__init__()类调用静态方法,导致“接受一个位置参数,但给了两个位置参数”TypeError

从__init__()类调用静态方法,导致“接受一个位置参数,但给了两个位置参数”TypeError
EN

Stack Overflow用户
提问于 2020-10-04 09:23:51
回答 5查看 675关注 0票数 1

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

代码语言:javascript
运行
复制
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而没有实例类时,我得到了预期的结果

代码语言:javascript
运行
复制
DetfileDetector.parse_detfile('foo.txt')

但是,当我从init()函数调用它时,我得到了错误:

TypeError: parse_detfile()采用一个位置参数,但给出了两个

我假设意思是‘自我’也被传递给静态方法,但这是一个静态方法,因此我期望自我不会被转移。

我试图修复的目的是将'file_path‘设置为一个可选的参数,没有一个作为默认参数,但我得到了一个

TypeError: parse_detfile()获得参数'file_path‘的多个值

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

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

  • 我现在看到,当我从VScode的'python‘运行它时(版本1.50.0-
  • ),它会失败,但是在从命令行运行它时或者在没有交互shell的情况下传递。我将使用python3.7.7 developers.
  • I'm向VScode

报告此问题。

Edit2:Detector类的内容

代码语言:javascript
运行
复制
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))
EN

Stack Overflow用户

发布于 2020-10-04 09:48:51

您的代码实际上是正确的

我用Python3.8测试了它,没有发现任何问题。

您可以使用该类或该类的实例调用staticmethod。

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

即使在早期版本的Python中,它也是这样工作的,我一直检查到Python2.7。所以,你为什么会犯这个错误,这是个谜。

也许给你的代码提供更多的上下文?

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64192960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档