Je veux avoir DSLs python à base de classe compacte sous la forme suivante:DSL Compact classe en python
class MyClass(Static):
z = 3
def _init_(cls, x=0):
cls._x = x
def set_x(cls, x):
cls._x = x
def print_x_plus_z(cls):
print cls._x + cls.z
@property
def x(cls):
return cls._x
class MyOtherClass(MyClass):
z = 6
def _init_(cls):
MyClass._init_(cls, x=3)
Je ne veux pas écrire MyClass()
et MyOtherClass()
après. Je veux juste que cela fonctionne avec seulement les définitions de classe.
MyClass.print_x_plus_z()
c = MyOtherClass
c.z = 5
c.print_x_plus_z()
assert MyOtherClass.z == 5, "instances don't share the same values!"
J'utilisé métaclasses et a réussi à obtenir _init_
, print_x
et subclassing fonctionne correctement, mais les propriétés ne fonctionnent pas. Quelqu'un pourrait-il suggérer une meilleure alternative? J'utilise Python 2.4+
Qu'est-ce qui ne va pas avec 'MyClass(). Print_x_plus_z()'? Quel est le problème avec 'c = MyOtherClass()'? Pourquoi ne pas simplement utiliser Python correctement? –
ou écrivez juste 'MyClass = MyClass()' après chaque classe. –
Vous pourriez considérer cela comme un exercice cérébral. Je veux juste le DSL universel le plus parfait que je puisse faire. Je ne veux pas écrire un membre MyClass = MyClass() ou MyClass(). Si cela est possible. –