Как правильно связать два класса друг с другом в Python - PullRequest
1 голос
/ 07 апреля 2020

Я кодирую змею в python на практике. Так что я должен классы: Field() и Snake() Я должен получить атрибуты от Snake в Field, а также наоборот.

Я делаю это так

if __name__ == "__main__":
  snake=Snake()
  field=Field(snake)
  snake.field = field

с полем __ init __ в поле:

def __init__(self, snake):
  self.snake = snake

Это «правильный» способ сделать это или есть лучший или более распространенный способ?

1 Ответ

1 голос
/ 07 апреля 2020

Если два класса должны иметь ссылки друг на друга, то лучшим способом, обеспечивающим это, будет:

class Snake:
    def set_field(self, field):
        self.field = field


class Field:
    def __init__(self, snake):
        self.snake = snake
        snake.set_field(self)

snake = Snake()
field = Field(snake)

Теперь вам больше не нужно явно кодировать snake.field = field, потому что теперь, когда вы создаете объект Field с экземпляром объекта Snake, конструктор Field обеспечит инициализацию объекта Snake ссылкой на объект Field. Дело в том, что необходимый код инициализации должен быть помещен в конструкторы, то есть __init__ методы, и, поскольку существует связь между Field и Snake, которая является двунаправленной, сделайте его явным в коде.

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