Как лучше поступить при взаимодействии двух классов в Python

Рейтинг: 1Ответов: 2Опубликовано: 09.06.2023

Хочу самостоятельно написать игру "Покер" в терминале, но с мультиплеером через socket. Вроде бы не трудно, но код получается очень запутанным, и вдруг я встретился с ситуацией, в которой один класс использует функции другого, как лучше поступить, передать объект класса GameServer через аргумент:

class Game():
...
    def players_move(self, player: player.Player, 
                     client: Client, server: GameServer):

        ...

Или лучше создать объект этого класса внутри другого класса, что даже звучит уже странно, если честно:

class Game():
    def __init__(self):
        ...
        self.game_server = GameServer()
    ....
    
    def players_move(self, player: player.Player, client: Client):
        ...

Хоть оно и звучит странно, но я всё же не уверен в правильности одного из них, а может и ни одно неправильно. Под правильностью я имею ввиду красоту и простоту кода

Ответы

▲ 5Принят

создать объект этого класса внутри другого класса, что даже звучит уже странно

нормально звучит, у этого подхода даже есть название - "композиция классов".

Если у вас по логике кода подразумевается, что экземпляр GameServer всегда относится к определённому экземпляру класса Game, то как раз лучше создавать его внутри.

▲ 2

Есть ещё средний вариант. Когда все объекты создаются где-то снаружи, в определённом порядке и в определённой зависимости друг от друга. DI фреймворк какой-нибудь опять же для этого можно использовать, чтобы объекты конфигом создавались.

class Game():
    def __init__(self, server: GameServer):
        ...
        self.game_server = server