Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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错误“__init“”接受1个位置参数,但给出了2个;_Python_Python 3.x - Fatal编程技术网

Python错误“__init“”接受1个位置参数,但给出了2个;

Python错误“__init“”接受1个位置参数,但给出了2个;,python,python-3.x,Python,Python 3.x,Python新手,刚刚编写了一个noddy示例,遇到了一个奇怪的错误 display.py import abc from graphics import * class Display: pass class Visual(metaclass=abc.ABCMeta): """Represents a thing which can be drawn on a display""" @abc.abstractmethod def draw(disp: Di

Python新手,刚刚编写了一个noddy示例,遇到了一个奇怪的错误

display.py

import abc
from graphics import *

class Display:
    pass

class Visual(metaclass=abc.ABCMeta):
    """Represents a thing which can be drawn on a display"""

    @abc.abstractmethod
    def draw(disp: Display) -> None:
        """Draws the visual to the display"""
        raise NotImplementedError()


class Display(metaclass=abc.ABCMeta):
    def __init__(self) -> None:
        __visuals = []

    def add_visual( vis: Visual ):
        __visuals.append(vis)

    def draw() -> None:
        for visual in __visuals:
            visual.draw(self)
from graphics import *
from gfx.display import Display

class GraphicsDisplay(Display):
    def __init__(self, window : GraphWin) -> None:
        super().__init__()
        __window = window

    def get_window() -> GraphWin:
        return __window
图形显示.py

import abc
from graphics import *

class Display:
    pass

class Visual(metaclass=abc.ABCMeta):
    """Represents a thing which can be drawn on a display"""

    @abc.abstractmethod
    def draw(disp: Display) -> None:
        """Draws the visual to the display"""
        raise NotImplementedError()


class Display(metaclass=abc.ABCMeta):
    def __init__(self) -> None:
        __visuals = []

    def add_visual( vis: Visual ):
        __visuals.append(vis)

    def draw() -> None:
        for visual in __visuals:
            visual.draw(self)
from graphics import *
from gfx.display import Display

class GraphicsDisplay(Display):
    def __init__(self, window : GraphWin) -> None:
        super().__init__()
        __window = window

    def get_window() -> GraphWin:
        return __window
回溯是

>>> win = GraphWin()
>>> display = GraphicsDisplay(window=win)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/julian/test/gfx_test/gfx/graphics_display.py", line 6, in __init__
    Display.__init__(self)
TypeError: __init__() takes 1 positional argument but 2 were given
win=GraphWin() >>>显示=图形显示(窗口=赢) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/home/julian/test/gfx\u test/gfx/graphics\u display.py”,第6行,in\uu init__ 显示。初始化(自) TypeError:\uuuu init\uuuuuu()接受1个位置参数,但提供了2个 graphics.py在这里


为什么它认为baseinit得到了两个参数?

那一行应该是这样的:

super(GraphicsDisplay, self).__init__()
当您在没有参数的情况下调用
super()
时,您得到的是非绑定父类实例,因此方法
\uuu init\uuu()
不会得到作为第一个参数传递的
self
对象


问题还可能在于类重写

该行应如下所示:

super(GraphicsDisplay, self).__init__()
当您在没有参数的情况下调用
super()
时,您得到的是非绑定父类实例,因此方法
\uuu init\uuu()
不会得到作为第一个参数传递的
self
对象


问题还可能在于类重写

您已将参数窗口定义为位置参数,但随后使用关键字参数对其进行了初始化

根据您定义GraphicsDisplay init的方式,这是正确的方法:

display = GraphicsDisplay(win)
或者,将init定义更改为具有默认值的关键字参数:

class GraphicsDisplay(Display):
    def __init__(self, window : GraphWin=None) -> None:
        super().__init__()
        __window = window

您已将参数窗口定义为位置参数,但随后使用关键字参数对其进行了初始化

根据您定义GraphicsDisplay init的方式,这是正确的方法:

display = GraphicsDisplay(win)
或者,将init定义更改为具有默认值的关键字参数:

class GraphicsDisplay(Display):
    def __init__(self, window : GraphWin=None) -> None:
        super().__init__()
        __window = window

一个类似的问题和很好的解释在这里D'oh!点C++程序员尝试Python。那个该死的自我每次都会抓住我。试着把自我作为第一个参数添加到方法中。这里有一个类似的问题和很好的解释!点C++程序员尝试Python。那个该死的self每次都会抓住我。试着将self作为第一个参数添加到方法中。这在python 3中发生了变化。super()。\uuuu init\uuuu()是正确的方法。这在python 3中发生了变化。super()。\uuuu init\uuuu()是正确的方法。