que estoy tratando de hacer una clase ImageLoader manejar la carga y procesamiento de recursos de imagen así: Sin embargoclase llamada/método estático de la variable de clase en Python
class ImageLoader:
TileTable = __loadTileTable('image path', some other variable)
@staticmethod
def _loadTileTable(arg1, arg2):
blah blah
, en la compilación me sale: NameError: name '_loadTileTable' is not defined
Si se sustituye la segunda línea con TileTable = ImageLoader.__loadTileTable('image path', some other variable)
entonces consigo NameError: name 'ImageLoader' is not defined
como estoy pasando de C# para Python, clases estáticas con métodos estáticos es lo que yo utilizo para implementar esto. Sin embargo, estoy abierto a cómo haría esto en general en python (es decir, llamar a funciones de biblioteca estáticas que solo están agrupadas por su funcionalidad).
ACTUALIZACIÓN: Después de leer las dos respuestas, estoy recibiendo una imagen que lo que estoy tratando de hacer, probablemente no está bien. ¿Cómo hago para imlementing ImageLoader para que pueda hacer esto:
Suponiendo que la tabla de baldosas devuelve una matriz
module1.py
aTile = ImageLoader.TileTable[1]
module2.py
anotherTile = ImageLoader.TileTable[2]
idealmente, llenaría TileTable solo en ce.
Actualización:
Gracias por todas las respuestas, me encontré con mi última respuesta a poblar TileTable sólo una vez en los módulos de Python mana
"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"
En cuanto a la clase estática, voy a renunciar a las clases y simplemente hacer una variable de nivel de módulo.
Cuando está usando 'staticmethod' en Python, generalmente está haciendo algo mal. Si no necesita variables de instancia ni variables de clase (campos estáticos), solo use una función de nivel de módulo. – delnan
@delnan: No estoy totalmente de acuerdo. Caso en el punto 'dict.fromkeys()' por defecto de Python. Hay casos de uso legítimos para estas cosas. – jathanism
@delnan: No estoy de acuerdo. La encapsulación es el inquilino principal de la programación orientada a objetos, que Joe intenta usar. Mantener una función que solo se relaciona con un ImageLoader dentro de la clase ImageLoader es una forma efectiva de codificar programáticamente esa relación (en lugar de asociarlas implícitamente porque están en el mismo módulo). –