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

Хочу самостоятельно написать игру "Покер" в терминале, но с мультиплеером через 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):
        ...

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


Ответы (2 шт):

Автор решения: Xander

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

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

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

→ Ссылка
Автор решения: CrazyElf

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

class Game():
    def __init__(self, server: GameServer):
        ...
        self.game_server = server
→ Ссылка