Вопрос наследования Python

1

У меня есть класс ящиков, которые нужно перемещать в сетке, но нужно получить доступ к этим координатам сетки в своих методах. Я не хочу, чтобы мои классы наследовали сетку, если только это не нужно. Нужно ли передавать сетку в классы в качестве параметра или сделать классы ящиков унаследованными от класса сетки? Спасибо.

Это редактирование. Позвольте пояснить. Классы ящиков должны знать длину и ширину сетки. Поэтому мне нужно вызвать внутри функций класса, таких как Grid.length() и прочее. Мне нужно это, хотя, чтобы дать мне длину и ширину сетки, которая была создана.

  • 0
    Что вы подразумеваете под "получить доступ к координатам этой сетки?" Нужно ли им знать свои собственные координаты в сетке? Или какие-то другие координаты?
  • 0
    Позвольте мне отредактировать вопрос, ребята
Теги:
class
inheritance

4 ответа

3
Лучший ответ

Общее правило будет параметром.

Вопрос: is- a vs. has- a:

 Is the box a grid? 
     yes: # if so, then is it really a box???
         The box should inherit grid
     no:
         The box should get a reference to the grid 
            #(generally through a setter or constructor parameter).

Изменить


Пример:

class Grid:
    def __init__(self,width=1,height=1):
        this.width = width; this.height = height;

    def getDimensions(self):
        return (this.width, this.height)

class Box:
    def __init__(self, grid):
        this.__grid = grid; this.x = 0; this.y = 0            

    def verify(self):
        width, height = this.__grid.dimensions()
        if this.x < width and this.y < height:
             print( "A-OK!" ); 
        else
             print( "I am off the grid!!!" )


grid = Grid();
box = Box(grid);
box.verify();
  • 0
    коробка - это не сетка, это шарик внутри сетки. Так как бы мне передать его в качестве параметра?
  • 0
    Вопрос: зачем ты это используешь? В 3.2 не нужно использовать self._insertvariable здесь
Показать ещё 1 комментарий
0

Поскольку ящик не является уточнением типа сетки, вы не должны наследовать их.

Вам может быть интересен шаблон Acquisition и модуль. Это позволяет получать атрибуты из динамической иерархии сдерживания, а не в статическом классе (is- a).

  • 0
    это будет работать для 3.2?
  • 0
    Это не ясно, и я не пробовал это на 3.x. Попробуйте и посмотрите. :-)
Показать ещё 1 комментарий
0

Коробка должна ссылаться на сетку. Однако с внутренними классами вам не нужно передавать сетку в качестве параметра с внутренними классами. Внутренние классы - это Java-функция, но вы можете метапрограммировать ее на Python.

http://tomayko.com/writings/python-inner-classes

Какова цель внутренних классов python?

  • 0
    Это ускоряет процесс вообще? Или это будет то же самое, что дать сетку в качестве параметра одному из классов, а затем наследовать от этого класса?
  • 0
    первый делает
Показать ещё 1 комментарий
0

Из того, что вы сказали, классы box не должны наследоваться от класса grid, так как это нарушит LSP.

Смотрите: Что такое принцип замены Лискова?

Классы box должны знать, как запросить grid для соответствующей информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню