Как одной строчкой вызвать методы из всех экземпляров класса?

Столкнулся с проблемой. У меня есть 10-20 объектов одного класса и мне нужно чтобы я одной строчкой вызывал метод из всех объектов данного класса.

Вот код где мне это нужно
import tkinter as tk
import sqlite3 as sql

oval_col_vo = 10

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack(fill="both", expand=True)

class Oval():
    def __init__(self, event, canvas):# рисует овал
        self.canvas = canvas
        self.x1 = event.x - 50
        self.y1 = event.y - 50
        self.x2 = event.x + 50
        self.y2 = event.y + 50
        self.shape = self.canvas.create_oval(self.x1, self.y1, self.x2, self.y2)
        #self.canvas.bind('<B1-Motion>', self.move_oval)

    def move_oval(self, event):# перемещает овал
        if (self.x1 <= event.x ) and (self.x2 >= event.x) and (self.y1 <= event.y) and (self.y2 >=event.y):# проверка находится ли курсор мышки                                                                             
            self.x1 = event.x - 50                                                          #там где находится овал чтобы переместить его
            self.y1 = event.y - 50
            self.x2 = event.x + 50
            self.y2 = event.y + 50
            self.canvas.coords(self.shape, self.x1, self.y1, self.x2, self.y2)

def oval(event):
    global oval_col_vo
    

    if oval_col_vo == 1:
        oval1 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1
        
    if oval_col_vo == 2:
        oval2 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1        
        
    if oval_col_vo == 3:
        oval3 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1

    if oval_col_vo == 4:
        oval4 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1

    if oval_col_vo == 5:
        oval5 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1

    if oval_col_vo == 6:
        oval6 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1

    if oval_col_vo == 7:
        oval7 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1
        
    if oval_col_vo == 8:
        oval9 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1
        
    if oval_col_vo == 9:
        oval9 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1

    if oval_col_vo == 10:
        oval10 = Oval(event, canvas)
        oval_col_vo = oval_col_vo-1
    else:
        print("pass")

    print(oval_col_vo)

canvas.bind('<Button-3>', oval)

root.mainloop()


нужно из всех объектов вызвать метод move_oval
  • Вопрос задан
  • 71 просмотр
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Храни все экземпляры в списке, итерируй по списку.
Ответ написан
Комментировать
@o5a
Хранить все эти созданные фигуры в списке, вместо отдельных переменных. Соответственно по списку можно делать массово все, что потребуется.
import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack(fill="both", expand=True)
# можно хранить в атрибутах canvas
canvas.max_oval_count = 10
canvas.ovals = []

class Oval():
    ...

def oval(event):
    # создаем фигуры в списке
    if canvas.max_oval_count > 0:
        canvas.ovals.append(Oval(event, canvas))
        canvas.max_oval_count -= 1

def move_ovals(event):
    for oval in canvas.ovals:
        oval.move_oval(event)

canvas.bind('<Button-3>', oval)
canvas.bind('<Button-1>', move_ovals)

root.mainloop()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Andy_U
Читайте про design patterns... Классика же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы