ich die Warnung in Frage für den folgenden Code erhalten:Python - Instanz Attribut außerhalb __init __() definiert
from tkinter import *
from tkinter import ttk
class Autocomplete(Frame, object):
def __init__(self, *args, **kwargs):
super(Autocomplete, self).__init__(*args, **kwargs)
self.list = []
def build(self, width, height, entries):
# I get the warning for the following 8 lines:
self._entries = entries
self.listbox_height = height
self.entry_width = width
self.text = StringVar()
self.entry = ttk.Entry(self, textvariable=self.text, width=self.entry_width)
self.frame = Frame(self)
self.listbox = Listbox(self.frame, height=self.listbox_height, width=self.entry_width)
self.dropdown = Listbox(self.frame, height=self.listbox_height, width=self.entry_width, background="#cfeff9",
takefocus=0)
self.entry.pack()
self.frame.pack()
self.listbox.grid(column=0, row=0, sticky=N)
self.dropdown.grid(column=0, row=0, sticky=N)
self.dropdown.grid_forget()
return self
root = Frame(Tk())
autocomplete = Autocomplete(root).build(74, 10, entries)
root.pack()
autocomplete.pack()
mainloop()
Wie soll ich dieses Problem beheben? Ich habe versucht, alles auf init zu verschieben, aber dann hatte ich einige Fehler, um die Argumente in der Zeile zu übergeben, in der ich das Autocompelete-Objekt erstellte. Also bitte geben Sie mir alle Änderungen, die ich machen muss. nicht nur, als müßtest du sie bewegen. Ich könnte die Warnung beheben, indem ich 8 Definitionszeilen hinzufüge, die allen Variablen None zuweisen, aber ich denke, das ist eine so dumme Lösung. Was ist also richtig?
* „Ich durch Zugabe von 8 Definitionszeilen zuweisen Keine alle Variablen, um die Warnung beheben könnte“ * ... das ist was dir die Warnung sagt. Das plötzliche Auftreten von Attributen auf einem Objekt, die nicht in der Methode "__init__" definiert wurden, kann das Debugging erschweren. – CoryKramer
auch, das ist ziemlich stark abhängig von der Linter Sie verwenden. – turbulencetoo
@turbulenztool Ich benutze pycharm –