gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:27:27 26 4
gpt4 key购买 nike

我正在尝试使 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 的最后一个答案

"A module can contain executable statements as well as function definitions. These statements are intended to initialize the module. They are executed only the first time the module is imported somewhere"

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

最佳答案

仅回答更新后的问题,您在 Python 中要做的是在名为 imageloader 的模块中使 TileTable 成为一个名为 tile_table 的变量。根本没有理由将这些放在一个类中。

然后你得到:

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 先入之见相协调。

关于python - 从python中的类变量调用类/静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5004837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com