Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从类“uuu init”调用staticmethod导致;取1个位置参数,但取2个;打字错误_Python_Visual Studio Code_Static Methods - Fatal编程技术网

Python 从类“uuu init”调用staticmethod导致;取1个位置参数,但取2个;打字错误

Python 从类“uuu init”调用staticmethod导致;取1个位置参数,但取2个;打字错误,python,visual-studio-code,static-methods,Python,Visual Studio Code,Static Methods,我使用staticmethod创建了一个类: 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):

我使用staticmethod创建了一个类:

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\u dirite
而不实例化类时,我得到了预期的结果

DetfileDetector.parse_detfile('foo.txt')
但是,当我从init()函数调用它时,我得到了错误:

TypeError:parse_detfile()接受1个位置参数,但2个位置参数无效 给定

我假设其含义是“self”也被传递给staticmethod,但这是一个staticmethod,因此我希望self不会被传递

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

TypeError:parse_detfile()为参数“file_path”获取了多个值

如果有人能告诉我如何正确书写,我将不胜感激

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

  • 现在我看到,当我从VScode的“python interactive shell”(版本1.50.0-insider)运行它时,它失败了,但当从命令行或不使用interactive shell运行它时,它会通过。我将向VScode开发人员报告这个问题
  • 我正在使用python 3.7.7
Edit2:
检测器的内容

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))

将您的代码更改为此,它应该可以工作

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

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

这是因为您从
\uuuu init\uuuu
调用了
self.parse\u detfile(file\u path)
。在那里也使用
DetfileDetector.parse_detfile()

问题是,在
self
上调用方法会神奇地将
self
作为第一个参数附加到该方法

我假设其含义是“self”也被传递给staticmethod,但这是一个staticmethod,因此我希望self不会被传递

staticmethod
的一半要点是不需要实例。但是,它仍然是类的属性,而不是顶级函数,因此:

如果有人能告诉我如何正确书写,我将不胜感激

您需要在类中查找它,因此:

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

是的,可以说有点尴尬。但是,
staticmethod
的另一半要点是,您实际上以这种方式将方法与类关联起来。如果这看起来不是一个好处,你可以考虑只在类之外做一个简单的顶层函数。

我认为这个问题不是来自你所显示的代码。在Python 3.6上进行了测试,结果如下:

类检测器:
通过
类DetfileDetector(检测器):
定义初始化(自身、文件路径,**kwargs):
超级()
self.detections=self.parse_detfile(文件路径)
@静力学方法
def parse_detfile(文件路径):
#对文件路径执行某些操作
打印(文件路径)
DetfileDetector('get.txt')
#get.txt
DetfileDetector.parse_detfile('tex.txt'))
#tex.txt
在VSCode中,在initparse_detfile的代码上添加断点,并在调试模式下运行代码以查看变量


因此,检查
检测器
,看看问题是否存在。

您的代码实际上是正确的

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

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

请看这里:

即使在较旧版本的Python中,它也是这样工作的,我一直检查到Python2.7。 所以你为什么会犯这样的错误有点神秘


也许可以提供更多关于代码的上下文信息?

我无法重现您的错误。它的工作原理如我下面的回答所示。你能分享
Detector
class的内容吗?@PraysonW.Daniel我用
Detector
编辑了这个问题,最好使用
self.detections=self.parse_detfile(file\u path)
,因为它不需要在代码中硬编码类名(如果包含类的名称不断更改,则不需要修改)。这也是我的建议。问题不在提交的代码中here@PraysonW.Daniel我们在同一页上。我很好奇这个问题是从哪里来的。我也很好奇。也许是
检测器中的某个东西
?谢谢Prayson W.Daniel和Hocli的回答,我用更多信息编辑了这个问题