Вопрос наследования Python - PullRequest
1 голос
/ 08 июня 2011

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

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

Ответы [ 4 ]

3 голосов
/ 08 июня 2011

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

Вопрос в том, имеет-а имеет-а:

 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 голосов
/ 08 июня 2011

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

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

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

0 голосов
/ 08 июня 2011

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

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

0 голосов
/ 08 июня 2011

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

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

Для чего предназначены внутренние классы Python?

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