标签: introspection

Obj-C内省:方法如何引用自己的选择器?

我希望编写一个宏,在任何引用方法选择器的方法中使用.我不希望传递方法的文字名称.例如:

#define RERUN [self performSelector:{something} withObject:nil afterDelay: 0.0]
Run Code Online (Sandbox Code Playgroud)

上面的"{something}"将解析为使用宏的方法的选择器.

有办法做到这一点吗?

methods introspection objective-c selector

3
推荐指数
1
解决办法
258
查看次数

通过Reflection获取案例类的参数

作为Matt R问题的后续跟进 ,由于Scala 2.10已经出现了相当长的一段时间,因此提取案例类的字段和值的最佳方法是什么.举一个类似的例子:

case class Colour(red: Int, green: Int, blue: String) {
  val other: Int = 42
} 

val RBG = Colour(1,3,"isBlue")
Run Code Online (Sandbox Code Playgroud)

我想得到一个列表(或数组或任何迭代器),它将构造函数中声明的字段作为这样的元组值:

[(red, 1),(green, 3),(blue, "isBlue")]
Run Code Online (Sandbox Code Playgroud)

我知道网上有很多关于同一问题的例子,但正如我所说,我想知道什么是提取所需信息的最理想方式

reflection scala introspection scala-2.10

3
推荐指数
2
解决办法
2051
查看次数

如何知道Proc是否是Ruby中的lambda

假设我已经创建了一个lambda实例,我想稍后查询这个对象以查看它是proc还是lambda.怎么做到这一点?.class()方法不起作用.

irb(main):001:0> k = lambda{ |x| x.to_i() +1 }
=> #<Proc:0x00002b931948e590@(irb):1>
irb(main):002:0> k.class()
=> Proc
Run Code Online (Sandbox Code Playgroud)

ruby lambda introspection proc

3
推荐指数
1
解决办法
652
查看次数

哪种编程语言具有最好的内省和反射能力?

许多语言都具有内省和反思的能力。然而,有些显然比其他更好。关于哪些语言在这方面“更好”以及为什么的任何建议。

reflection introspection

3
推荐指数
1
解决办法
1022
查看次数

如何内省 win32com 包装器?

我有一个设备,它记录光谱数据并由第 3 方应用程序控制。出于自动化目的,我想使用应用程序的 COM 接口来检索 Python 中的数据。由于没有使用 Python 的 API 的适当文档,我从不同的网络资源中收集了以下代码,成功获得了第一帧:

comtypes.client.GetModule(('{1A762221-D8BA-11CF-AFC2-508201C10000}', 3, 11))
import comtypes.gen.WINX32Lib as WinSpecLib
win32com.client.pythoncom.CoInitialize()
doc = win32com.client.Dispatch("WinX32.DocFile")

buffer = ctypes.c_float()
frame = 1
spectrum = doc.GetFrame(frame, buffer)
Run Code Online (Sandbox Code Playgroud)

但是,对 的调用GetFrame与它在 Visual Basic 中的定义不一致,由制造商提供:

Sub GetFrame(frame As Integer, buffer As Variant)
Run Code Online (Sandbox Code Playgroud)

GetFrame将文档中的数据复制到 Visual Basic 数组中。如果buffer是空 Variant,则GetFrame创建一个具有适当大小和数据类型的数组,并在复制数据之前将缓冲区设置为指向它。

这意味着在 Visual Basic 中,变量buffer填充了数据,而函数GetFrame没有返回值,而在 Python 中buffer保持不变,但函数GetFrame确实返回了实际数据。

如果我没有观察到我的程序随机崩溃抛出 aMemoryError并因此在代码的这一点指示内存泄漏,我就不会关心这些微妙之处。所以我的怀疑是,每次调用GetFrame某些内存时都会为缓冲区分配但从未释放过,因为win32com不知何故弄乱了 API 包装。 …

python introspection win32com

3
推荐指数
1
解决办法
1167
查看次数

如何找出小部件的顶级容器?

像往常一样,我创建了深度嵌套的小部件框架,这些框架有时可以创建其他顶层。 帧。

当我创建一个新的 Toplevel 框架, 我想存储原始 Toplevel 框架 通过它创建了新的 Toplevel 但由于创建它的按钮深深嵌套在它自己的框架中并且不知道它在它的 Toplevel 层次结构中的位置,它如何发现它的 Toplevel 容器将它传递到其他地方?

我是否必须预先将它存储在某种全局属性中,还是有办法通过使用一些内省来找到它?

调用any_widget._root()将根容器(tkinter.Tk 实例还给我......是否有一个令人惊讶的未记录的widget._toplevel方法?

编辑:删除(以供将来参考)使用错误和混淆的词

tkinter introspection python-3.5

3
推荐指数
1
解决办法
1634
查看次数

Python + MongoDB,如何动态选择DB Collection

如何使用 Python 动态指向 MongoDB 中的特定集合名称?

我从网络中的几十个传感器中的任意一个接收数据,并且我想将原始数据存储到以传感器命名的数据库集合中。

# Server Parameters
host = '1.2.3.4'
port = 27017
client = MongoClient(host, port)
db = client.myDB                # use database myDB

# receive data from sensors
# {"sensorName":"...", "x":"...", "y":"...", "z":"...", "time":"..."}

db.SensorA.insert_one({...})    # record raw data in the collection for SensorA
db.SensorB.insert_one({...})
db.SensorC.insert_one({...})
Run Code Online (Sandbox Code Playgroud)

我不想明确地写db.SensorName.insert_one({...}),而是想以某种方式引用给定的传感器/集合名称。

谢谢

python reflection collections introspection mongodb

3
推荐指数
1
解决办法
1646
查看次数

如何在Python 3.7中重新实现Python的__qualname__?(有一些小的调整)

__qualname__属性对我很有用,因为它使函数具有上下文关系;但是,我很难将其用于我的用例,因为:

  1. __qualname__返回一个字符串。对于我的用例,我需要引用父对象。

  2. __qualname__有时返回super类而不是引用的类。例如:

    class Parent():
    
        def __init__(self):
            pass
    
    
    class Child(Parent):
        pass
    
    
    print(Child.__init__.__qualname__)  # Prints: "Parent.__init__"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我正在开发的包需要足够强大,据我所知,边缘情况__qualname__没有记录。

除了使用 解析Python 文件之外ast,还可以__qualname__通过检查在Python3 中重新实现吗?Python是如何实现的__qualname__?在重新实现核心功能时,我认为我将能够根据我的用例进行调整。


先前的研究:

我无法在 Python 源代码中找到 qualname 实现。

python introspection python-3.x

3
推荐指数
1
解决办法
735
查看次数

在python中找出类实例中可用的函数?

如何动态地找出从类的实例定义了哪些函数?

例如:

class A(object):
    def methodA(self, intA=1):
        pass

    def methodB(self, strB):
        pass

a = A()
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想找出实例'a'有methodA和methodB,以及它们采用哪些参数?

python introspection

2
推荐指数
1
解决办法
2096
查看次数

从调用者的全局变量中获取变量.什么是框架对象?

检查模块的文档说:

当以下函数返回"帧记录"时,每个记录都是一个命名元组FrameInfo(frame, filename, lineno, function, code_context, index).元组包含框架对象,文件名,当前行的行号,函数名称,源代码中的上下文行列表以及该列表中当前行的索引.

什么是"框架对象"?我希望使用这个框架对象从调用者的角度获取变量的值globals():

import my_util

a=3
my_util.get_var('a')
Run Code Online (Sandbox Code Playgroud)

my_util.py

import inspect

def get_var(name):
    print(inspect.stack()[1][0])
Run Code Online (Sandbox Code Playgroud)

python introspection

2
推荐指数
1
解决办法
1298
查看次数