目前我正在制作一个游戏服务器,实际上我想用Python为我的所有服务器产品制作一个基础项目。我以前用C#但是我想做一些不同的事情,所以我开始使用Python。虽然我不知道怎么做。你知道吗
在C#中,我曾经创建一个静态“核心”类来保存所有数据,包含入口点,然后在那里引导服务器。下面是一个小例子:
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项目中使用相同的概念,但我不知道如何做到这一点。你知道吗
我先得到这个:
你知道吗动态mu.py你知道吗
import 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]))
然后在我的Ga里meConnectionListener.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,所以如果我做了一些非常错误的事情,我理解,我想学习,所以我会感激我能得到的每一个帮助:)
典型的Python代码不太使用静态成员。1因此我建议将大多数变量设置为实例变量。例如,在
DynamicEmu.py
中,没有模块级的Engine
实例。相反,应该有一个用Engine
实例初始化的类或接受
Engine
实例作为参数的函数如果不知道
DynamicEmu.py
中的代码应该做什么,就很难更具体。你知道吗类似地,在
GameConnectionListener.py
中,您可以像其他代码也是如此。(请记住,Python函数是对象,可以作为参数传递并用作回调。考虑一下你是否可以通过一个函数而不是一个类逃脱惩罚。)
显然,必须在某个地方创建
Engine
实例。逻辑位置可能在main()
函数中,或者在程序早期调用的某个设置函数中。然后可以根据需要将其传递给其他函数和方法。你知道吗根据我的经验,当你清楚代码不同部分之间的依赖关系时,编写一个大型项目往往效果最好。例如,明确游戏引擎是使用监听器还是监听器使用游戏引擎。如果引擎使用侦听器,那么您应该在
Engine
中使用GameConnectionListener
,而不是反之亦然。GameConnectionListener
的设计应该使它不知道Engine
。当然,这并不总是可能的,但无论你能做到什么程度,我认为这都是有帮助的。它减少或消除了示例代码中的循环依赖关系,还可以帮助您分别编写程序的每个组件,而不必同时担心其他组件。你知道吗1或者C#所称的静态成员;在Python中,它们被称为类成员,但模块级变量通常提供几乎相同的功能,这些变量更简单。你知道吗
相关问题 更多 >
编程相关推荐