В настоящее время я создаю игровой сервер, на самом деле хочу сделать базовый проект для всех своих серверных продуктов в Python. Я использовал C#, но я хотел сделать что-то другое, поэтому я начал на Python. Хотя я не знаю, как это сделать.Python 'static core class'
В C# Я использовал один статический класс «core», содержащий все данные, содержащие точку входа, и там я загружаю сервер. Вот небольшой пример:
using System;
namespace SERVER
{
public static class Engine
{
public static DatabaseHelper DatabaseHelper { get; private set; }
static void Main(string[] args)
{
DatabaseHelper = new DatabaseHelper();
}
}
}
Тогда я только мог бы использовать в каждом классе:
Engine.DatabaseHelper.SomeMethod();
Теперь я хочу ту же концепцию в моем проекте Python, но я не знаю, как это сделать ,
Я получил этот первый:
DynamicEmu.py
import Engine
engine = Engine.Engine()
Engine.py
from Network.Game.GameConnectionListener import GameConnectionListener
class Engine:
gameConnection = None
def __init__(self):
gameConnection = GameConnectionListener()
def tuple_to_addr(self, tpl):
return '{0}:{1}'.format(tpl[0], str(tpl[1]))
А потом в моей GameConnectionListener.py я хотел бы использовать:
import DynamicEmu
Для того, чтобы сделать
DynamicEmu.engine.tuple_to_addr(TUPLE HERE)
Но я получаю эту ошибку
Traceback (most recent call last):
File "C:/Users/Josh/PycharmProjects/DynamicEmu/DynamicEmu.py", line 1, in <module>
import Engine
File "C:\Users\Josh\PycharmProjects\DynamicEmu\Engine.py", line 3, in <module>
from Network.Game.GameConnectionListener import GameConnectionListener
File "C:\Users\Josh\PycharmProjects\DynamicEmu\Network\Game\GameConnectionListener.py", line 4, in <module>
import DynamicEmu
File "C:\Users\Josh\PycharmProjects\DynamicEmu\DynamicEmu.py", line 3, in <module>
engine = Engine.Engine()
AttributeError: module 'Engine' has no attribute 'Engine'
Я сосу в Python, так что если я делаю что-то действительно неправильно я понимаю, я хочу узнать, так что я оценил бы каждую часть помощи, я могу get :)
У вас есть круговая зависимость: вам нужен объект 'Engine' для создания' GameConnectionLIstener', но вам нужно 'GameConnectionListener' для создания' Engine'. – chepner
Хм, да, ты прав, я понимаю, каким образом я могу сделать что-то вроде моего примера на C#? –
Я не знаю, что еще делает '' Engine', но 'tuple_to_addr' не использует' self', поэтому я не знаю, почему он является частью класса 'Engine'. Сделайте его автономной функцией вне класса. (Он может работать в том же модуле, но я бы его перемещал, циклический импорт не обязательно был проблемой, но вы все равно должны избегать их.) – chepner