Python错误“__init“”接受1个位置参数,但给出了2个;
Python新手,刚刚编写了一个noddy示例,遇到了一个奇怪的错误 display.pyPython错误“__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
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()是正确的方法。