最佳python/Django代码生成器?
很快的问题。我想知道是否有任何Django软件可以自动生成python编码。如果有,请告诉我。我从来没有听说过python代码生成器。Python是一种动态语言,您几乎可以在其中执行任何操作。与依赖Java世界中已知的静态代码生成器不同,我认为在大多数情况下,您可以编写两行等价的Python代码,这更方便最佳python/Django代码生成器?,python,html,django,generator,Python,Html,Django,Generator,很快的问题。我想知道是否有任何Django软件可以自动生成python编码。如果有,请告诉我。我从来没有听说过python代码生成器。Python是一种动态语言,您几乎可以在其中执行任何操作。与依赖Java世界中已知的静态代码生成器不同,我认为在大多数情况下,您可以编写两行等价的Python代码,这更方便 如果您正在寻找Python词法分析器,请尝试。我从未听说过Python代码生成器。Python是一种动态语言,您几乎可以在其中执行任何操作。与依赖Java世界中已知的静态代码生成器不同,我认为
如果您正在寻找Python词法分析器,请尝试。我从未听说过Python代码生成器。Python是一种动态语言,您几乎可以在其中执行任何操作。与依赖Java世界中已知的静态代码生成器不同,我认为在大多数情况下,您可以编写两行等价的Python代码,这更方便
如果您正在寻找Python词法分析器,请尝试。我在Python中看到的最接近代码生成的东西是Python的元类特性。例如,以下是创建只读属性的简单元类:
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")
下面是正在运行的元类:
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('__')]
印刷品:
Coord3D(x=100,y=200,z=0)
100
['_x', '_y', '_z', 'x', 'y', 'z']
分配给pt.x将引发AttributeError,因为这是一个只读属性。我在Python中看到的最接近代码生成的东西是Python的元类特性。例如,以下是创建只读属性的简单元类:
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")
下面是正在运行的元类:
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('__')]
印刷品:
Coord3D(x=100,y=200,z=0)
100
['_x', '_y', '_z', 'x', 'y', 'z']
分配给pt.x将引发AttributeError,因为这是一个只读属性。我们不要用尖刻的注释来运行新的pythonistas。。。也许OP有合理的代码生成需求 试试这些:
玩得开心 我们不要用尖刻的话来吓跑新的蟒蛇学家。。。也许OP有合理的代码生成需求 试试这些:
玩得开心 查看Django Builder。。。真的很酷。。。上传一个models.py文件,它会生成更好的models.py,还有CRUD视图模板、API/序列化程序、admin.py、url.py,甚至测试
查看Django Builder。。。真的很酷。。。上传一个models.py文件,它会生成更好的models.py,还有CRUD视图模板、API/序列化程序、admin.py、url.py,甚至测试
从什么生成代码?UML图,你不喜欢django admin StartProject你的用例是什么,你想做什么?这将更容易提出合理的解决方案。从什么生成代码?UML图,你不喜欢django admin StartProject你的用例是什么,你想做什么?这将使我们更容易提出合理的解决方案。好的建议,但不是他要求的。好的建议,但不是他要求的。感谢这个答案,即使现在已经很老了。我对Python相当陌生,由于我来自最近的Node/Angular背景,我不熟悉django/drf中的开发工作流程。感觉manage.py应该有更多类似于ng g的命令,但我想这是我需要习惯的。请欣赏这个答案,即使现在已经很老了。我对Python相当陌生,由于我来自最近的Node/Angular背景,我不熟悉django/drf中的开发工作流程。感觉manage.py应该有更多类似于ng g的命令,但我想这是我需要习惯的。