从python中的类变量调用类/静态方法


问题内容

我正在尝试使ImageLoader类处理像这样的图像资源的加载和处理:

class ImageLoader:
    TileTable = __loadTileTable('image path', some other variable)

    @staticmethod
    def _loadTileTable(arg1, arg2):
        blah blah

但是,在编译时我得到: NameError: name '_loadTileTable' is not defined

如果我更换了与第二行TileTable = ImageLoader.__loadTileTable('image path', some other variable),然后我得到NameError: name 'ImageLoader' is not defined

当我从C#转到Python时,我将使用具有静态方法的静态类来实现此目的。但是,我对在python中通常会做的事情持开放态度(即,调用仅按其功能分组在一起的静态库函数)。

更新: 阅读了两个答案后,我得到一张图片,我想做的可能不正确。我将如何实现ImageLoader以便执行此操作:

假设tile表返回一个数组

module1.py

aTile = ImageLoader.TileTable[1]

module2.py

anotherTile = ImageLoader.TileTable[2]

理想情况下,我只填充一次TileTable。

更新:

感谢所有答案,我在python模块doco中仅找到一次填充TileTable的最后答案

“一个模块可以包含可执行语句以及函数定义。这些语句旨在初始化模块。它们仅在模块第一次导入某处时才执行。”

至于静态类,我将放弃类,只做一个模块级变量。


问题答案:

只需回答更新的问题,您将在Python中执行的操作是TileTable在名为tile_table的模块中创建一个名为的变量imageloader。完全没有理由将任何此类内容放入类中。

这样便得到:

module1.py

import imageloader
aTile = imageloader.tile_table[1]

module2.py

import imageloader
anotherTile = imageloader.tile_table[2]

imageload.py 看起来像:

def _loadTileTable(arg1, arg2):
    pass # blah blah
tile_table = _loadTileTable('image path', other_var)

将Python模块视为其他语言中的单例实例(实际上是这样),您就可以将其与您从其他语言继承的所有OO前置概念相协调。