¿Es posible agregar propiedades y métodos especiales a los módulos? Quiero definir un módulo tal que importarlo actúa como una instancia de clase, y el cuerpo actúa como una definición de clase. Esencialmente, es para evitar una sintaxis fea como esta:¿Los módulos pueden tener propiedades?
import game
if game.Game().paused:
print("The game is paused")
E.g. el módulo de juego se vería así:
_Speed = 1
@property
def paused():
return _Speed == 0
y el archivo de usarlo:
import game
if game.paused:
print("The game is paused")
Además, es posible definir métodos especiales (como __call__
)?
Para ser claros, no diferencio entre los métodos de clase/instancia, ya que estoy usando game.Game
como clase singleton/borg.
he probado usando @property y definiendo __bool__
, pero ni actúa como esperaba.
Editar (información sobre por qué quiero usar una propiedad):
que tiene una propiedad game.speed
, una función y una función game.paused()
game.pause(bool)
. Esencialmente, tengo una variable temporal utilizada para almacenar la velocidad del juego cuando el juego está en pausa. Hay una variable de velocidad privada que se establece en cero cuando el juego está en pausa. Nunca quiero que el usuario vea la velocidad como cero, y pueda modificar la velocidad mientras el juego está en pausa, de modo que cuando se reanude el juego, use la nueva velocidad.
¿Por qué no usar 'from game import Game'? –
¿Cómo funcionarían las propiedades? Una metaclase? ¿Cómo se referiría la metaclase a la clase Game? – Darthfett
Estoy diciendo que si usa la sintaxis 'from ... import', * no necesita * propiedades en el módulo. Las personas que usan su módulo no esperan que haya propiedades en él, de modo que si suelta las propiedades del módulo y simplemente usa 'form ... import' en su propio código, obtendrá la misma legibilidad, pero su API mejorará cumplir con las expectativas de otros programadores, que es una buena cosa. –