Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中组织类?_Python_Python 3.x - Fatal编程技术网

如何在Python中组织类?

如何在Python中组织类?,python,python-3.x,Python,Python 3.x,我遇到了一个问题,我觉得这个问题的答案非常简单,但很难用谷歌的短搜索来解释,我找不到关于这个话题的任何东西 因此,在我最近开发的一款游戏中,我为游戏中的每个块/瓷砖提供了多种类型的对象: class Char(object): ... def update(self): ... def move(self, direction): ... 或 显然,在主程序中定义所有这些类可能会非常混乱,例

我遇到了一个问题,我觉得这个问题的答案非常简单,但很难用谷歌的短搜索来解释,我找不到关于这个话题的任何东西

因此,在我最近开发的一款游戏中,我为游戏中的每个块/瓷砖提供了多种类型的对象:

    class Char(object):
        ...
        def update(self):
            ...
        def move(self, direction):
            ...

显然,在主程序中定义所有这些类可能会非常混乱,例如,如果我想在游戏中创建一个名为“screen”(计算机屏幕)的对象,那么这将与实际游戏窗口的screen类冲突。此外,创建第二个名为gameObjects的模块也会导致我的所有游戏对象无法访问main中定义的变量的问题


那么,我如何组织或分组我的课程呢?我是Python的初学者,所以请给出一个简单的答案,谢谢。

您通常不希望对象与类具有相同的名称。如果它们不是在同一个范围内定义的,那么实际上并不存在冲突,但仍然令人困惑

但是,如果遵循典型的Python命名约定,这不会是一个问题:类以大写字母开头,变量以小写字母开头。因此,您的变量称为
screen
,您是否有一个名为
screen
的类并不重要

同时,您可能希望将相关类放在一个模块中。
gameObjects
模块中定义的类的对象将无法访问main中定义的变量,但您不希望它们访问。全局变量几乎总是一个坏主意。如果对象需要访问变量,请将该变量传递给其构造函数


在创建自己的大型项目之前,您可能应该先看看其他几个大型项目,看看它们是如何组织的。

这是
,而不是
。如前所述,这将是
SyntaxError
。问题是,它不是变量屏幕,而是窗口的屏幕类,而不是变量。你是否建议我在与我的主要功能相同的级别或范围内创建“Character”和“Dirt”类,我不确定这是否被认为是混乱的,但我肯定很难遵循。啊,你是在问,命名类是否合理,例如。,
mygame.environment.Screen
表示计算机监视器和
mygame.windowing.Screen
表示游戏窗口?是的,有时候这是合理的。在这种特殊情况下,名称确实令人困惑(游戏窗口可能被称为
window
GameWindow
或其他什么),但我可以想象,例如,克林贡人出现的游戏内视图屏幕将被称为
Screen
,这将导致相同的问题。这实际上是将事物分解成模块是一个好主意的原因之一。问题的另一半是:角色和污垢是否与主要功能在同一范围内实际上取决于系统的复杂程度。但我猜在你的情况下,它们不属于同一范围;它们属于由main函数导入的模块。您可以通过在
main
中创建所需变量的
namedtuple
并在实例化时将其传递给类来解决此问题。组织是关键。这是可能的,但不是一个好主意。不要滥用类作为模块。尤其不是作为解决访问全局变量问题的一种方法,正确的解决方法是去掉全局变量,并将它们放在具有定义良好的访问链的适当位置。同样,显而易见的方法是将它们(或包含它们的对象)传递给构造函数中需要它们的任何对象。
    class Dirt(object):
        ...