我们需要创建SQLAlchemy类来访问多个外部数据源,这些数据源的数量会随着时间的推移而增加.我们为我们的核心ORM模型使用声明性基础,我知道我们可以使用autoload = True手动指定新的ORM类来自动生成映射.
问题是我们需要能够动态生成它们,如下所示:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
stored={}
stored['tablename']='my_internal_table_name'
stored['objectname']='MyObject'
Run Code Online (Sandbox Code Playgroud)
并动态地将它变成这样的东西:
class MyObject(Base):
__tablename__ = 'my_internal_table_name'
__table_args__ = {'autoload':True}
Run Code Online (Sandbox Code Playgroud)
我们不希望类持续时间超过打开连接,执行查询,然后关闭连接所需的时间.因此,理想情况下,我们可以将上面"存储"变量中的项目放入数据库中,并根据需要提取它们.另一个挑战是对象名称(例如"MyObject")可能在不同的连接上使用,所以我们不能定义它一次并保持它.
关于如何实现这一点的任何建议将不胜感激.
谢谢...
在什么情况下可能,什么时候不可能,__class__在Python中分配实例的属性?
错误消息,例如TypeError: __class__ assignment: only for heap types不要真的为我做.
这是Ruby 1.8.7但应该与1.9.x相同
我试图拆分一个字符串,例如:
a = "foo.bar.size.split('.').last"
# trying to split into ["foo", "bar","split('.')","last"]
Run Code Online (Sandbox Code Playgroud)
基本上在它代表的命令中拆分它,我试图用Regexp做但不确定如何,想法是使用regexp
a.split(/[a-z\(\)](\.)[a-z\(\)]/)
Run Code Online (Sandbox Code Playgroud)
在这里尝试使用组(\.)来分割它,但这似乎不是一个好方法.
#inherited在class Foo声明之后立即调用.我想要一些只在end关闭类声明的语句之后运行的东西.
这里有一些代码来举例说明我的需求:
class Class
def inherited m
puts "In #inherited for #{m}"
end
end
class Foo
puts "In Foo"
end
puts "I really wanted to have #inherited tiggered here."
### Output:
# In #inherited for Foo
# In Foo
# I really wanted to have #inherited tiggered here.
Run Code Online (Sandbox Code Playgroud)
这样的事情存在吗?可以创建吗?我完全没有运气吗?
以下代码尝试替换Groovy类中的现有方法:
class A {
void abc() {
println "original"
}
}
x= new A()
x.abc()
A.metaClass.abc={-> println "new" }
x.abc()
A.metaClass.methods.findAll{it.name=="abc"}.each { println "Method $it"}
new A().abc()
Run Code Online (Sandbox Code Playgroud)
它会产生以下输出:
original
original
Method org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod@103074e[name: abc params: [] returns: class java.lang.Object owner: class A]
Method public void A.abc()
new
Run Code Online (Sandbox Code Playgroud)
这是否意味着当通过将元类设置为闭包来修改元类时,它并不真正替换它,而只是添加它可以调用的另一个方法,从而导致元类有两个方法?是否有可能真正替换方法,以便第二行输出打印"新"?
在试图找出它时,我发现DelegatingMetaClass可能有所帮助 - 这是最Groovy的方法吗?
我不明白class_eval.
class Module
def attr_ (*syms)
syms.each do |sym|
class_eval %{def #{sym}= (val)
@#{sym} = val
end}
end
end
end
Run Code Online (Sandbox Code Playgroud)
什么%意思?
怎么class_eval办?
哪里(val)来了?
我想学习模板Haskell,但我找到的所有教程要么假设你学习了lisp并且知道什么是lisp宏,或者你知道一些cs理论行话 - 作为拼接,quasiquotations等等 - 或者关于宏的一些理论结果.
我不能编写一行lisp代码(虽然我打算有一天这样做,但我现在没时间学习它).Haskell是我的第一个函数式语言,我学到了它,我可以定期编写代码,使用monad,applicative,理解类型系统等等......但我不太了解(也想学习但是我对它来说太愚蠢......:P)关于它背后的理论背景.所以我对通常在TH教程中找到的术语一无所知.
因此,问题是:对于编写Haskell的人,有没有关于TH的教程,而不是作为一名专业的计算机科学家,而是作为一个使用编程进行日常琐事的人,他将Haskell作为他的第一个函数语言学习?也许介绍一下以TH为例的宏和元编程?
谢谢大家.:)
我正在使用Ruby on Rails 3.0.9,我试图"动态"设置一些变量值.那是...
...在我的模型文件中我有:
attr_accessor :variable1, :variable2, :variable3
# The 'attributes' argument contains one or more symbols which name is equal to
# one or more of the 'attr_accessor' symbols.
def set_variables(*attributes)
# Here I should set to 'true' all ":variable<N>" attributes passed as symbol
# in the 'attributes' array, but variable names should be interpolated in a
# string.
#
# For example, I should set something like "prefix_#{':variable1'.to_s}_suffix".
end
Run Code Online (Sandbox Code Playgroud)
如何将这些变量值设置为true?
我尝试使用该self.send(...)方法,但我没有成功(但是,可能,我不知道如何使用该send方法...是否可以通过使用该 …
ruby variables metaprogramming ruby-on-rails ruby-on-rails-3
我曾经认为元编程涉及修改程序,并且(对于什么是反射及其为什么有用?)的一些答案,反思仅仅包括对程序的内省.但是,反射标签维基说
反射是程序在运行时可以观察和 修改自身结构和行为的过程.
反思是程序可以执行内省的过程.这种内省通常涉及在运行时观察和修改自身结构和行为的能力.从理论角度来看,反思涉及程序指令作为数据存储的事实.程序代码和数据之间的区别在于如何处理信息.因此,程序可以将自己的代码视为数据并观察或修改它们.
[强调补充]
元编程的描述是
元编程正在编写编写或操纵其他程序作为其数据的程序.
元编程很有用,因为它可以节省程序员宝贵的时间.有些语言支持元编程本身,这允许创建具有强大表现力的代码.
(我认为"写"并不意味着将源代码写入文件,因为这是代码生成.)
这会使元编程只是反射的一个子集吗?
或者这些术语是不同的,因为某些编程语言是由另一种语言元编程的,在这种情况下,元编程会发生而不是反射?(在维基百科的元编程文章中有一个未被引用的句子声称这个)
或者"反射"和"元编程"这两个术语的使用方式会有所不同,具体取决于该人使用的编程语言?
这是理解转换运算符,模板和模板特化的主要学术练习.在下面的代码转换操作符模板工程int,float以及double,但使用时失败std::string...之类的.我已经创建了转换为的特化std::string,它在初始化时使用std::string s = a;,但在与强制转换一起使用时失败static_cast<std::string>(a).
#include <iostream>
#include <string>
#include <sstream>
class MyClass {
int y;
public:
MyClass(int v) : y(v) {}
template <typename T>
operator T() { return y; };
};
template<>
MyClass::operator std::string() {
std::stringstream ss;
ss << y << " bottles of beer.";
return ss.str();
}
int main () {
MyClass a(99);
int i = a;
float f = a;
double d = a; …Run Code Online (Sandbox Code Playgroud) metaprogramming ×10
ruby ×4
python ×2
c++ ×1
class ×1
declarative ×1
groovy ×1
haskell ×1
inheritance ×1
macros ×1
metaclass ×1
reflection ×1
regex ×1
sqlalchemy ×1
templates ×1
terminology ×1
variables ×1