这是我的想法:从一个简单的对象开始:
class dynamicObject(object):
pass
Run Code Online (Sandbox Code Playgroud)
并且能够动态添加预先编写的方法:
def someMethod(self):
pass
Run Code Online (Sandbox Code Playgroud)
所以我可以这样做:
someObject = dyncamicObject()
someObject._someMethod = someMethod
someObject._someMethod()
Run Code Online (Sandbox Code Playgroud)
问题是,它要我指定_someMethod()的self部分,使它看起来像这样:
someObject._someMethod(someObject)
Run Code Online (Sandbox Code Playgroud)
这似乎有点奇怪,因为当一个方法"附加"到一个对象时,它不是自我隐含的吗?
我是Python的新思维方式的新手,我正试图摆脱像C#这样的语言的相同思维过程,因此我想通过选择和选择我想要添加的验证方法来创建一个验证对象而不是制作某种对象层次结构.我认为Python的"自我"想法对我有利,因为我认为该对象会隐含地知道将自己发送到附加到它的方法中.
有一点需要注意,该方法没有以任何方式附加到对象(完全不同的文件),所以可能这是问题?也许通过自己定义方法,self实际上是有问题的方法,因此不能暗示为对象?
我想动态获取和设置对象属性,如下所示:
public class Person
{
public string Name {get; set; }
}
public class Testing
{
public void Run()
{
var p = new Person();
SetValue(p, "Name", "Henry");
var name = GetValue(p, "Name");
}
}
Run Code Online (Sandbox Code Playgroud)
请问我可以获得使用动态方法(或表达式树)创建 GetValue 和 SetValue 方法的帮助吗?
我打算将编译后的表达式保存在字典中,以加快将来的 get/set 调用速度。
我有以下代码用于将哈希集合转换为我的类上的方法(有点像活动记录).我遇到的问题是我的二传手不能正常工作.我对Ruby仍然很陌生,并且相信我已经让自己扭转了一下.
class TheClass
def initialize
@properties = {"my hash"}
self.extend @properties.to_methods
end
end
class Hash
def to_methods
hash = self
Module.new do
hash.each_pair do |key, value|
define_method key do
value
end
define_method("#{key}=") do |val|
instance_variable_set("@#{key}", val)
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这些方法已创建,我可以在课堂上阅读它们,但设置它们不起作用.
myClass = TheClass.new
item = myClass.property # will work.
myClass.property = item # this is what is currently not working.
Run Code Online (Sandbox Code Playgroud) 我试图定义一组函数,我可以传入给定的参数.
例如,我该怎么做?
>> get_1_type("xxx")
V4_RELATIONSHIP_TYPES=[1=>2,3=>4]
V4_RELATIONSHIP_TYPES.keys.each do |key|
self.class.send(:define_method, "get_#{key}_type".downcase) do
return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
end
end
# i can call -> get_1_type("xxx") , and get the function called
Run Code Online (Sandbox Code Playgroud) 我需要通过将变量值传递给该调用方法来动态调用java类来获取retrun值.我尝试使用java.lang.reflect.Method;
PredictionManager pm = new PredictionManager();
Class invokeclass = pm.getClass();
Class[] cArg = new Class[1];
cArg[0] = Integer.class;//Instances.class;
Method lMethod = invokeclass.getMethod("showLong", cArg);
Object aaa= lMethod.invoke(pm, cArg);
Run Code Online (Sandbox Code Playgroud)
在那里我需要传递值作为参数.但是这个方法需要给出参数类型.不是参数值.
我能做什么?