2010-10-28 5 views
0

très rapide question. Je me demande s'il existe un logiciel Django qui génère automatiquement le codage python. S'il y en a, merci de me le faire savoir.Meilleur générateur de code python/Django?

+4

Je sens un développeur Java. –

+0

Lol je ne suis pas un développeur java – Shehzad009

+3

Lequel alors? C#? Parce qu'il est presque ridicule de penser à un générateur de code Python étant donné sa faible quantité de passe-partout. –

Répondre

1

Je n'ai jamais entendu parler de générateurs de code python. Python est un langage dynamique où vous pouvez faire presque n'importe quoi. Au lieu de compter sur des générateurs de code statiques connus du monde Java, je dirais que vous pouvez écrire quelques lignes Python équivalentes dans la plupart des cas, ce qui est beaucoup plus pratique. Si vous cherchez un lexeur/analyseur Python, essayez pyparsing.

+0

Ok je vais vérifier – Shehzad009

+0

Bon conseil mais ce n'est pas ce qu'il a demandé. –

0

La chose la plus proche que j'ai vue en Python pour la génération de code est la fonctionnalité __metaclass__ de Python. Par exemple, voici est un simple métaclasse pour créer des propriétés en lecture seule:

class ReadonlyProperties(type): 
    def __init__(cls, name, bases, attrs): 
     props = attrs.get("props",[]) 
     if props: 
      # generate property for each name in propnames 
      def defineProperty(p): 
       return property(lambda self: getattr(self, '_'+p)) 
      for p,_ in props: 
       setattr(cls, p, defineProperty(p)) 

      # generate wrapper for __init__ to initialize property values 
      if "__init__" in attrs: 
       setattr(cls, "__orig_init__", attrs["__init__"]) 
      else: 
       setattr(cls, "__orig_init__", None) 
      def new__init__fn(self, *args, **kwargs): 
       if self.__orig_init__: 
        self.__orig_init__(*args) 
       for p,pdefault in props: 
        if p in kwargs: 
         setattr(self, '_'+p, kwargs[p]) 
        else: 
         setattr(self, '_'+p, pdefault) 
      setattr(cls, "__init__", new__init__fn) 

      # generate __str__ function 
      def __repr__fn(self): 
       return "%s(%s)" % (name, ','.join("%s=%s" % (p,getattr(self,p)) for p,_ in props)) 
      setattr(cls, "__repr__", __repr__fn) 

      # don't need this class property any more 
      delattr(cls, "props") 

Maintenant, voici la métaclasse en action:

class Coord3D(object): 
    __metaclass__ = ReadonlyProperties 
    props = [('x',0), ('y',0), ('z',0)] 

pt = Coord3D(x=100, y=200) 
print repr(pt) 
print pt.x 
print [n for n in dir(pt) if not n.startswith('__')] 

Prints:

Coord3D(x=100,y=200,z=0) 
100 
['_x', '_y', '_z', 'x', 'y', 'z'] 

Attribution à pt.x soulèvera une AttributeError, puisqu'il s'agit d'une propriété en lecture seule.

6

Ne jetons pas de nouveaux pythonistas avec des remarques sarcastiques ... peut-être que l'OP avait des besoins légitimes pour la génération de code.

Essayez:

Cheetah

Cog

Jinja2

have fun!