Как использовать Python суперкласс и наследование (пример графики черепахи)?

Поскольку у вас есть общее условие where, вы можете использовать includes . Это сгенерирует запрос LEFT OUTER JOIN:

Action.includes(:actions_users).where(actions_users: { user_id: true })

Или, если вы используете Rails 5+, Active Record предоставляет метод поиска left_outer_joins :

Action.left_outer_joins(:actions_users).where(actions_users: { user_id: true })

0
задан Bogdan Prădatu 19 January 2019 в 20:47
поделиться

1 ответ

Как вы обнаружили, черепаха Screen является луком многих слоев. Есть две проблемы, которые нам нужно решить: класс _Screen вызывает его инициализатор super (TurtleScreen's) таким образом, который не подходит для подкласса; функция Screen() вызывается из множества мест и жестко определяет, какой класс создает экран. Итак, давайте рассмотрим обе проблемы:

import turtle

class MyScreen(turtle._Screen):
    def __init__(self):
        super().__init__()
        turtle.TurtleScreen.__init__(self, MyScreen._canvas)

        self.setup(500, 500)
        self.screensize(1000, 1000)
        self.title("Title")
        self.bgcolor("black")

def MyScreenFunction():
    if turtle.Turtle._screen is None:
        turtle.Turtle._screen = MyScreen()
    return turtle.Turtle._screen

turtle.Screen = MyScreenFunction

class MyTurtle(turtle.Turtle):
    def __init__(self):
        super().__init__(shape="circle")

wn = turtle.Screen()

tortoise = MyTurtle()
tortoise.color('white')

tortoise.circle(100)

wn.mainloop()

Однако, может быть, есть лучший путь. Черепаха может использоваться как в автономном режиме , как описано выше, так и в , встроенном в программу tkinter. встроенный подход использует RawTurtle, TurtleScreen и, необязательно, Scrolled Canvas. Эти классы легче подклассить, и лучшим подходом может быть создание собственного эквивалента автономной черепахи путем внедрения черепах в tkinter и создания подклассов по мере необходимости.

0
ответ дан cdlane 19 January 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: