草庐IT

Metaprogramming

全部标签

python - Python 中的动态/运行时方法创建(代码生成)

我需要在运行时为方法生成代码。能够运行任意代码并拥有文档字符串非常重要。我想出了一个结合exec和setattr的解决方案,这是一个虚拟示例:classViking(object):def__init__(self):code='''defdynamo(self,arg):"""dynamo'sadynamicmethod!"""self.weight+=1returnarg*self.weight'''self.weight=50d={}execcode.strip()indsetattr(self.__class__,'dynamo',d['dynamo'])if__name__=

python - Python 中的动态/运行时方法创建(代码生成)

我需要在运行时为方法生成代码。能够运行任意代码并拥有文档字符串非常重要。我想出了一个结合exec和setattr的解决方案,这是一个虚拟示例:classViking(object):def__init__(self):code='''defdynamo(self,arg):"""dynamo'sadynamicmethod!"""self.weight+=1returnarg*self.weight'''self.weight=50d={}execcode.strip()indsetattr(self.__class__,'dynamo',d['dynamo'])if__name__=

Python装饰器使函数忘记它属于一个类

我正在尝试编写一个装饰器来进行日志记录:deflogger(myFunc):defnew(*args,**keyargs):print'Entering%s.%s'%(myFunc.im_class.__name__,myFunc.__name__)returnmyFunc(*args,**keyargs)returnnewclassC(object):@loggerdeff():passC().f()我想打印这个:EnteringC.f但我收到了以下错误消息:AttributeError:'function'objecthasnoattribute'im_class'大概这与'log

Python装饰器使函数忘记它属于一个类

我正在尝试编写一个装饰器来进行日志记录:deflogger(myFunc):defnew(*args,**keyargs):print'Entering%s.%s'%(myFunc.im_class.__name__,myFunc.__name__)returnmyFunc(*args,**keyargs)returnnewclassC(object):@loggerdeff():passC().f()我想打印这个:EnteringC.f但我收到了以下错误消息:AttributeError:'function'objecthasnoattribute'im_class'大概这与'log

用于元编程的 Python 与 Ruby

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.我目前主要是D程序员,并希望在我的工具箱中添加另一种语言,最好是支持元编程黑客的语言,而这种黑客技术无法用像D这样的静态编译语言来完成。我已经阅读了一点Lisp,我很想找到一种语言,它允许Lisp所做的一些很酷的事情,但没有Lisp的奇怪语法等。我不想引发一场语言之战,而且我确信Ruby和Python都有各自的取舍,所以我将列出对我个人而言重要的内容

用于元编程的 Python 与 Ruby

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前.我目前主要是D程序员,并希望在我的工具箱中添加另一种语言,最好是支持元编程黑客的语言,而这种黑客技术无法用像D这样的静态编译语言来完成。我已经阅读了一点Lisp,我很想找到一种语言,它允许Lisp所做的一些很酷的事情,但没有Lisp的奇怪语法等。我不想引发一场语言之战,而且我确信Ruby和Python都有各自的取舍,所以我将列出对我个人而言重要的内容

python - Pony (ORM) 如何使用它的技巧?

PonyORM将生成器表达式转换为SQL是一个不错的技巧。示例:>>>select(pforpinPersonifp.name.startswith('Paul')).order_by(Person.name)[:2]SELECT"p"."id","p"."name","p"."age"FROM"Person""p"WHERE"p"."name"LIKE"Paul%"ORDERBY"p"."name"LIMIT2[Person[3],Person[1]]>>>我知道Python具有出色的内省(introspection)和元编程内置功能,但是这个库如何能够在不进行预处理的情况下翻译生成

python - Pony (ORM) 如何使用它的技巧?

PonyORM将生成器表达式转换为SQL是一个不错的技巧。示例:>>>select(pforpinPersonifp.name.startswith('Paul')).order_by(Person.name)[:2]SELECT"p"."id","p"."name","p"."age"FROM"Person""p"WHERE"p"."name"LIKE"Paul%"ORDERBY"p"."name"LIMIT2[Person[3],Person[1]]>>>我知道Python具有出色的内省(introspection)和元编程内置功能,但是这个库如何能够在不进行预处理的情况下翻译生成

ruby - 当我尝试时,书中的 Metaprogramming Ruby 2 示例不起作用。故障排除协助

在阅读MetaprogrammingRuby2的一章时,我遇到了书中的一个示例,当我执行代码时它似乎不起作用。array_explorer.rbdefexplore_array(method)code="['a','b','c'].#{method}"puts"Evaluating:#{code}"evalcodeendloop{pexplore_array(gets())}上面的代码旨在说明eval的强大功能。在下一个示例中,本书将教授代码注入(inject)的主要缺陷,并像这样重构代码以维护:array_explorer.rbdefexplore_array(method,*arg

c++ - 模板参数中的 "typename ="是什么意思?

我在《EffectiveModernC++》一书的第189页看到了这个表达:template::type>explicitPerson(T&&n);我只是想知道“typename=”部分是什么意思。它当然看起来像模板参数的默认参数。但是你不需要像“typenamesome_name=...”这样的默认参数吗?第二个模板参数没有名称,在这种情况下我没有看到第二个模板参数被使用。附:当我在谷歌(或任何其他搜索引擎)上搜索答案时,等号总是被丢弃,这使得几乎不可能找到答案...... 最佳答案 这是一个可选的模板参数,没有名称和默认值。它用