从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前置概念相协调。