我想在非常罕见的特定情况下从类外访问私人方法和变量. 我已经看到,尽管使用了内省,但这是不可能的. 具体情况是下一个: 我想拥有这样的东西: class Console { final public static function run() { while (TRUE != FALSE) { echo "\n> "; $command = trim(fgets(STDIN)); switch ($command) { case 'exit': case 'q': case 'quit': echo "OK+\n"; return; default:
以下是关于 introspection 的编程技术问答
我想知道如何将字符串输入转换为变量名称以用于Python代码.具体示例: def insrospect(foo, bar): requested_module = makestringvariable(foo) requested_object = makestringvariable(bar) import requested_module for item in inspect.getmemebers(requested_module.requested_object): member = makestringvariable(item[0]) if callable(requested_object.member): print item if __name__ == '__main__': introspect(somemodule, someobject) 所以在上面,因为
说我有一个名为choice的变量等于2.我如何访问变量的名称?等同于 的东西 In [53]: namestr(choice) Out[53]: 'choice' 用于制作字典.有一个很好的方法,我只是想念它. 编辑: 这样做的原因就是这样.我正在运行一些数据分析内容,其中我将使用多个参数调用该程序,这些参数想在运行时进行调整或不调整.我在上次运行中从.config文件构建为 的参数中阅读了我使用的参数. filename no_sig_resonance.dat mass_peak 700 choice 1,2,3 提示值时,显示了先前使用的字符串输入将使用先前使用的值. 我的问题是因为在撰写词典时,这些值已被扫描.如果需要参数,我将运行get_param访问文件并找到参数. 我认为我将通过阅读一次.config文件并从中产生字典来避免问题.我最初避免了这是因为...我不再记得的原因.更新我的代码的完美情况! 解决方案 如果您坚持认为
gtk.builder (在XML文件中描述)可以发射class Gui(gobject.GObject): def __init__(self): self.gui_file = "../data/gui.xml" builder = gtk.Builder() builder.add_from_file(self.gui_file) builder.connect_signals(self) def on_whatever_gui_event(self, widget, data=None): ... 在我的应用程序中,我还有其他信号是由非GUI对象生成的(我的模型(如MVC模式)在更改其内部状态时会发出信号),但需要由GUI处理. 我正在尝试找到一种可以使我自动连接到GUI实例也是我的自定义信号的方法. ,换句话说,我试图不尝试必须手动将每个信号连接到其处理程序.理想情况下,最终代码应该看起来像: class Gui(gobject.GObject):
通过使用PRCTL或PTHREAD_SET_NAME_NP之类的函数,可以更改线程的名称.两种函数的限制至少在Linux 2.6.38中强加了,该名称不能超过15个字符(null终止是第16个字节). 这个15个字符的限制在哪里施加,并且是否有任何(甚至是非正统)的方式? 更新 : 如评论中所述,这是由内核强加的. 可以在此处找到该定义: http://lxr.linux.no/linux+v2 .6.37/include/linux/sched.h#l245 解决方案 15-char限制由内核强制执行: struct task_struct::comm[TASK_COMM_LEN] 宽16字节. 如果要增加它,则必须重新编译内核. 其他解决方案 尽管正常任务名称限制是在内核中设置的,但是您可以通过覆盖指向argv[0]的内存来更改命令行参数(如ps所示).这可用于显示最多一页的其他数据.
当我持有代码对象(通过.func_code或__code__> python 3中的内部设备)时,是否有任何方法呼叫此代码?简单地称呼它是行不通的: def f(): pass f.func_code() 导致 Traceback (most recent call last): File "", line 1, in TypeError: 'code' object is not callable 当您喜欢单位测试嵌套功能时,这可能会派上用场: def f(): def g(): return 3 f.x = g return g() + 1 f.func_code.co_consts[1] 导致 ", line 2> 当然,这条代码仍然需要上下文等.但这不是我的问题. 解决方案 一个人
我有一个iPad应用程序,其中我的视图控制器是许多UigeSturerEncognizer的UigeSturerEcognizerDelegate.我已经实施了以下uigeSturerEcognizerdelegate的方法: - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // Double tapping anywhere on the screen hides/shows the toolbar if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] == YES) { if (touch.tapCount == 2) { self.toolbar.hidden = self.toolbar
一位同事今天问了一个有趣的问题 - C#关键字/操作员"被视为反射? object tmp = "a string"; if(tmp is String) { } 该操作员在幕后如何实现?它需要反思还是内省?或由于语言的强烈键入性质,是否可以立即访问对象的类型作为内存中对象的顶级属性? msdn P> 请注意,IS运算符仅考虑参考转换,拳击转换和拆箱转换. IS运算符未考虑其他转换,例如用户定义的转换. 可以考虑盒装和未盒装转换的能力似乎对我来说意味着某种内省. 解决方案 参考ECMA-335 ,is操作员生成isinst对象模型IL指令(分区III§4.6),它是基本指令集的一部分,而不是作为反射库的一部分(分区IV§5.5). 编辑:与反射库相比,is运算符非常有效.您可以通过反射进行基本相同的测试基本相同的测试: typeof(T).IsAssignableFrom(obj.GetType()) 编辑2:您对castclass和isi
我正在尝试编写一个可以推断spark /** * Example: * ======== * toSparkType("string") => StringType * toSparkType("boolean") => BooleanType * toSparkType("date") => DateType * etc. */ def toSparkType(inputType : String) : DataType = { var dt : DataType = null if(matchesStringRegex(inputType)) { dt = StringType } else if(matchesBooleanRegex(inputType)) { dt = BooleanType } else if(matchesDateRegex(inputType)) { dt = DateType } else if(...) { ... } dt } 我的目标是支持可
我有一个通用类T型,我想在实例化时获取进入类的类型的名称.这是一个例子. class MyClass { func genericName() -> String { // Return the name of T. } } 我已经四处寻找几个小时,我似乎找不到任何方法.有人尝试过吗? 任何帮助都非常感谢. 谢谢 解决方案 纯粹的迅速实现方法是不可能的. 可能的解决方法是: class MyClass { func genericName() -> String { let fullName: String = NSStringFromClass(T.self) let range = fullName.rangeOfString(".", options: .BackwardsSearch) if let range = r
我一直在尝试确定类中字段的类型.我已经看过所有内省方法,但还没有弄清楚如何做.这将用于从Java类生成XML/JSON.我在这里查看了许多问题,但还没有找到我需要的问题. 示例: class Person { public final String name; public final List children; } 当我拨打这个对象时,我需要知道chidren字段是类型Person的对象列表,因此我可以正确地拨号. 我尝试了 for (Field field : Person.class.getDeclaredFields()) { System.out.format("Type: %s%n", field.getType()); } 但这只会告诉我它是List,而不是Person s 的List 谢谢 解决方案 请看一下获得字段类型来自Java教程 trail> trail:反射API . 基
我在视图功能中使用了装饰器(@render_to django_annoying package). ,但事实是,我想获得由视图函数返回的原始dact,而不是为了测试目的,而不是装饰器返回的HttpResponse对象. 装饰器使用@wraps(来自functools). 如果无法访问此问题,那么您对如何进行测试有任何想法吗? 解决方案 包装函数将作为函数闭合单元提供.哪个细胞完全取决于有多少封闭变量. 对于一个简单的包装器,唯一的闭合变量是函数到包装,它将是第一个: wrapped = decorated.func_closure[0].cell_contents 但是您可能必须检查所有func_closure值. 使用/p> >>> from functools import wraps >>> def my_decorator(f): ... @wraps(f) ... def wrapper(*args, **kw
我想找出一种类型是否使用模板参数定义了成员函数,但是模板参数被Sfinae限制. 示例我有一个类型A,带有单个函数foo struct A{ template std::enable_if,ReturnType> foo(T t){ ... } }; Condition是某种条件,例如std::is_pos_v 现在,我正在使用boost::hana::is_valid来找出类型是否具有foo()或foo(int)的成员函数,但是当使用模板参数时,我会丢失. 我想写类似的东西 auto has_foo = hana::is_valid([](auto t) -> delctype(hana::traits::declval(t).foo(???)){}); has_foo(hana::type_c); //
一个简单的示例: template // this template parameter should be usable outside! struct Small { typedef _X X; // this is tedious! X foo; }; template struct Big { typedef typename SomeSmall::X X; // want to use X here! SomeSmall bar; X toe; }; 是否有一种方法可以访问Small的模板参数X Small而无需在Small类中使用typedef? 解决方案 取决于您在做什么, template template参数可能是一个更好的选择: // "typename X" is a template type parameter. It accepts a t
两个 Stackoverflow 按照先前的答案,我提出了下面的代码.问题是在" #if 0"子句中代码不编译.作为替代解决方案,我创建了" decode()"函数,以将无效指针指向目标参数.这有效,但在编译时丢失了类型信息.有更好的解决方案吗? struct Foo_s { int i; }; BOOST_FUSION_ADAPT_STRUCT( Foo_s, (int, i) ) struct Bar_s { int v; Foo_s w; }; BOOST_FUSION_ADAPT_STRUCT( Bar_s, (int, v) (Foo_s, w) ) struct AppendToTextBox { template void operator()(T& t) const { int status = 0; const char *realname = abi::__cxa_demangle(typ
您如何列出tclsh实例中加载的所有名称空间? chenz 解决方案 尝试从TCLER的 wiki proc listns {{parentns ::}} { set result [list] foreach ns [namespace children $parentns] { eval lappend result [listns $ns] lappend result $ns } return $result } 运行它时,我将获得以下输出: % listns ::platform ::activestate::teapot::link ::activestate::teapot ::activestate ::tcl ::clock ::tcl::info ::tcl::dict ::tcl::tm ::t
问题,解释器内部有一些脚手架来检查框架对象,可以通过sys._getframe()检索.框架对象似乎仅读取,但是我找不到明确指出此的文档中的任何明显内容.有人可以确认这些对象是否可以写入(某种方式)或仅读取? import sys def foobar(): xx='foo' ff = sys._getframe() ff.f_locals['xx'] = 'bar' print xx if __name__ == '__main__': foobar() 运行时会打印出'foo',但下面的帖子演示了从当前帧中运行的变量是可写的. 解决方案 来自CPYTHON源,Objects/frameobject.c: static PyMemberDef frame_memberlist[] = { {"f_back", T_OBJECT, OFF(f_back), RO}, {"f_c
在我的C ++程序中,如何在运行时以编程性检测符号是否通过Linux上的'strip'GNU开发工具剥离? ? 我想要一个函数定义,该定义如果被剥离,则返回true,否则为false. 在" main()"上使用dlsym()可以可靠地检测? 解决方案 我知道file命令可以说出差异,因此您可以查看其源以查看其使用的机制. 其他解决方案 从另一个答案: 被剥离的 elf 将缺少.symtab条目. file命令遍历所有精灵部分标题,直到找到符号表部分.如果找不到一个,则将二进制视为剥离. libelf 库允许程序操纵精灵对象文件,存档文件和存档成员. #include #include #include #include /* Include for ELF processing */ #include #include i
我将如何为使用cmake构建的C项目生成自动绑定? 我想生成python,java,.net,php,perl,tcl,ruby,ruby和八度的绑定. 解决方案 您可以找到一个示例在这里/p> 摘要: 以下示例是用于为Swig接口文件创建Python包装器的CMAKE输入文件,示例.I: # This is a CMake example for Python FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) FIND_PACKAGE(PythonLibs) INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) SET(CMAKE_SWIG_FLAGS "") SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CP