Я играл с графикой черепахи, пытаясь лучше понять объекты, и столкнулся с небольшой проблемой. Я узнал о функции super () и хотел ее использовать:
from turtle import Turtle, _Screen, Screen
class turtle(Turtle):
def __init__(self):
super().__init__(shape="circle")
wn = Screen()
tortoise = turtle()
Так что, если я сделаю это, все будет работать как шарм. Я получаю экран и могу использовать любой метод Черепахи на своем классе черепах.
from turtle import Turtle, _Screen, Screen
class window(_Screen):
def __init__(self):
super().__init__()
self.setup(500,500)
self.screensize(1000,1000)
self.title("Title")
self.bgcolor("black")
wn = window()
Это также будет прекрасно работать, я получаю то, что спрашиваю: черное окно 1000x1000 в коробке 500x500 с ползунками Нет проблем. Но если я хочу объединить это:
from turtle import Turtle, _Screen, Screen
class window(_Screen):
def __init__(self):
super().__init__()
self.setup(500,500)
self.screensize(1000,1000)
self.title("Title")
self.bgcolor("black")
class turtle(Turtle):
def __init__(self):
super().__init__(shape="circle")
wn = window()
tortoise = turtle()
Появится экран, но я получу ошибку от черепахи:
AttributeError: у объекта '_Screen' нет атрибута '_mode'
Я просматривал модуль черепахи и обнаружил, что функция Screen () делает это:
def Screen():
"""Return the singleton screen object.
If none exists at the moment, create a new one and return it,
else return the existing one."""
if Turtle._screen is None:
Turtle._screen = _Screen()
return Turtle._screen
Поэтому я изменил класс окна, добавив в него следующее:
from turtle import Turtle, _Screen, Screen
class window(_Screen):
def __init__(self):
Turtle._screen = Screen()
super().__init__()
#self.setup(500,500)
#self.screensize(1000,1000)
#self.title("Title")
#self.bgcolor("black")
class turtle(Turtle):
def __init__(self):
super().__init__(shape="circle")
wn = window()
tortoise = turtle()
Это работает так, я получу белое окно с круглой черепахой. Но если я раскомментирую настройку , размер экрана или bgcolor , Я получу ошибку:
AttributeError: у объекта 'window' нет атрибута '_tracing'
или
AttributeError: объект 'window' не имеет атрибута 'cv'
Так что мне бы снова пришлось объявить некоторые параметры перед __ init __ в окне класса, чтобы он работал. Кажется, что-то мне не хватает. Почему черепаха наследует все и прекрасно работает, но _Screen не инициализируется со всеми необходимыми параметрами?