2017-07-11 4 views
1

Neu bei Python, nur ein noddy Beispiel schreiben, einen seltsamen Fehler bekommen.Python Fehler "__init __() braucht 1 Positionsargument aber 2 wurden gegeben"

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) 

graphics_display.py

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 

Die Zurückverfolgungs ist

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

graphics.py hier ist

Warum es die Basis denkt init bekommt 2 Argumente?

+1

ein ähnliches Problem und eine sehr gute Erklärung dafür sein könnte, ist hier https://stackoverflow.com/questions/23944657 – Gaurav

+0

D'oh! Finde den C++ - Programmierer, der Python versucht. Dieses verdammte Selbst wird mich jedes Mal erwischen. –

+0

versuchen, selbst als erstes Argument der Methode hinzuzufügen. –

Antwort

0

Diese Zeile sollte wie folgt aussehen:

super(GraphicsDisplay, self).__init__() 

Wenn Sie super() ohne Argumente anrufen, Sie bekommen nicht gebundene Mutterklasseninstanz, so Methode __init__() nicht bekommen self Objekte als erste übergeben Streit.

Das Problem auch mit Klasse überwiegendes

+0

Versuchte das, bekam den gleichen Fehler! –

Verwandte Themen