Поместить объекты из класса в атрибут другого класса, который сам является классом в Python - PullRequest
0 голосов
/ 01 октября 2019

У меня есть класс с именем Geometricalobjects, от которого наследуются многие классы: треугольник, круг, прямоугольник, квадрат, параллелепипед ... У меня также есть класс Drawmpaper, который имеет ровно два атрибута: его имя и список геометрических объектов. Идея заключается в том, чтобы нанести геометрические объекты на бумагу для рисования. (Например, если d = Drawpaper ("one") и s = Square (0,1,3) и мы выполняем d.addgeometricalobjet (s)), он добавит квадрат с центром (0,1) и side =3 в списке). И я хочу использовать класс Display, который будет наследовать от класса Canvas модуля Tkinter, чтобы взять Drawpaper и отобразить, из каких геометрических объектов он сделан.

Проблема в том, что я не знаю, какдобавить объекты из класса в атрибут класса, который сам является классом. Я попробовал это:

class Display(Canvas):
def __init__(self,parent, w, h, bg, draw):
    Canvas.__init__(self, width = w, height = h, bg = bg)
    self.__drawings=drawpaper #drawpaper is actually an object of Drawpaper class
    self.__geometricalobjects=draw._Drawpaper__list_of_geometricalobjects

Я не знаю, правильный ли этот код или это то, что решит мою проблему.

Надеюсь, вы поможете мне понять эти сложные концепции.

Заранее спасибо.

1 Ответ

0 голосов
/ 02 октября 2019

Прежде всего, взгляните на эту страницу, объясняющую концепцию наследования классов и super () в Python . Это может быть очень полезно и уже может быть применено в вашем фрагменте кода

Относительно вашего вопроса:

Проблема в том, что я не знаю, как добавить объекты из класса ватрибут класса, который сам по себе является классом.

Я не уверен, что полностью понимаю вашу проблему, но я могу прояснить некоторые моменты вокруг:

  1. Как только вы определитекласс, это план объекта Python. Когда вы вызываете этот проект с помощью метода __init__ (например, a = Square(0,1,3)), вы теперь имеете дело с экземпляром этого класса, который хранится в переменной a
  2. Каждый класс может иметь столько методови атрибуты, как вы хотите, и также унаследует их от суперкласса. Они хранятся в назначенной переменной и могут быть вызваны из любого места. Ссылка, которую я дал вам, содержит несколько хороших примеров, но допустим, что:
class Square():
    def __init__(self, center_x, center_y, width):
        self.center = (center_x, center_y)
        self.width = width
        self.length = width

 a = Square(0,1,3)
 a.center #will return (0,1)
 a.width #will return 3

в вашем фрагменте кода, если draw является экземпляром Drawpaper, и этот класс имеет атрибутDrawpaper.__list_of_geometricalobjects, вы можете получить доступ к этому атрибуту экземпляра, выполнив draw.__list_of_geometricalobjects. Однако рекомендуется проверить, так ли это, с помощью метода isinstance() или, лучше, hasattr(), чтобы напрямую проверить атрибут.

Еще одна вещь, которую я заметил в вашем фрагменте кода, заключается в том, чтоdrawpaper не определено в рамках этого класса. Другими словами, должно ли это быть включено в вызов __init__ в качестве аргумента? это опечатка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...