标签: introspection

内省调用对象

我如何A从内部b.func()(即A实例self)内省实例:

class A():
    def go(self):
        b=B()
        b.func()

class B():
    def func(self):
        # Introspect to find the calling A instance here
Run Code Online (Sandbox Code Playgroud)

python introspection

16
推荐指数
2
解决办法
9734
查看次数

如何检查python函数是否更改(在实时代码中)?

如果我有一个函数的引用,我可以检查它的代码对象f.__code__,获取签名,然后对此签名执行后续检查以查看代码是否更改.这很好.但是,如果其中一个功能的依赖项发生了变化呢?例如

def foo(a, b):
    return bar(a, b)
Run Code Online (Sandbox Code Playgroud)

让我们说foo保持不变,但bar改变了.有没有办法可以foo通过foo.__code__对象检查'依赖''live' (与解析文本和使用AST)?

python reflection introspection

16
推荐指数
1
解决办法
792
查看次数

Perl 6是否与Python的dir()相当?

我正试图在Perl 6中感到舒服.当我在REPL提示符下时,我在Python中发现的一件事就是我可以做一个dir(对象)并找出一个对象的属性,在Python中包含对象的方法.

这通常有助于提醒我想做什么; "哦,这是正确的,Python中的修剪被称为条带",就像那样.

在Perl 6中,我知道内省方法.WHO,.WHAT,.WHICH,.HOW和.WHY,但这些是在类或对象级别.我如何找出对象内部的内容,以及我可以对它做些什么?

introspection perl6 raku

16
推荐指数
1
解决办法
285
查看次数

types.CodeType()python调用的参数是什么?

我正在尝试为python编写自己的"marshal"代码,这样我就可以在Google App Engine上存储已编译的python代码,以动态的方式提供脚本.大家都可以验证,GAE不支持"marshal","pickle"不能序列化代码对象.

我发现我可以构造一个代码对象,types.CodeType()但它需要12个参数.

尽管我已经尝试过,但我找不到任何关于此调用的文档,我真的需要构建代码对象,以便我可以exec().我的问题是,有没有人知道这个types.CodeType()"构造函数" 的参数是什么或者是什么方式来反省它?我已经使用了这里info()定义的功能,但它只是吐出一般信息!

快速FAQ:

  • 问:为什么要编译代码?
  • 答:CPU时间花费在Google App Engine上的真实资金,以及我可以节省数量的每个CPU周期.
  • 问:为什么不使用"元帅"?
  • 答:这是Google App Engine中不受支持的模块之一.
  • 问:为什么不使用"泡菜"?
  • 答:Pickle不支持代码对象的序列化.

UPDATE

截至2011年7月7日,Google App Engine基础架构不允许实例化代码对象,因此我的论点没有实际意义.希望将来在GAE上得到修复.

python compiler-construction google-app-engine dynamic-cast introspection

15
推荐指数
3
解决办法
3055
查看次数

Clojure中的反思

在Clojure中进行内省的最佳方法是什么?是否有类似Python的dir功能?我特别感兴趣的是找到我正在与之互操作的java类上可用的方法,但我也有兴趣找到Clojure中与内省相关的任何东西.

introspection clojure

15
推荐指数
3
解决办法
3962
查看次数

Python内省:在函数定义中访问函数名和docstring

考虑以下python代码:

def function():
    "Docstring"

    name = ???
    doc = ???

    return name, doc

>>> function()
"function", "Docstring"
Run Code Online (Sandbox Code Playgroud)

我需要更换问号,以便从同一个函数中获取函数的名称和文档字符串?

编辑:到目前为止,大多数答案明确地硬编码其定义中的函数名称.是否可以执行类似下面的操作,其中新函数get_name_doc将从调用它的外框访问函数,并返回其名称和doc?

def get_name_doc():
    ???

def function():
    "Docstring"

    name, doc = get_name_doc()

    return name, doc

>>> function()
"function", "Docstring"
Run Code Online (Sandbox Code Playgroud)

python introspection

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

注意python中的变量

有一个庞大的python项目,其中一个类的一个属性在某些地方只有错误的值.

它应该是sqlalchemy.orm.attributes.InstrumentedAttribute,但是当我运行测试时它是常量值,让我们说字符串.

有一些方法可以在调试模式下运行python程序,并在每个步骤之后自动执行一些检查(如果变量更改类型)吗?

PS我知道如何在inspect和property decorator的帮助下记录类实例属性的变化.可能在这里我可以使用这种方法与元类...

但有时我需要更一般和更强大的解决方案......

谢谢.

PPS我需要类似的东西:https://stackoverflow.com/a/7669165/816449,但可能会更详细地解释该代码中发生的事情.

python debugging introspection pdb

15
推荐指数
2
解决办法
2万
查看次数

生成SQL以更新主键

我想更改主键和引用此值的所有表行.

# table master
master_id|name
===============
foo|bar

# table detail
detail_id|master_id|name
========================
1234|foo|blu
Run Code Online (Sandbox Code Playgroud)

如果我给出一个脚本或功能

 table=master, value-old=foo, value-new=abc
Run Code Online (Sandbox Code Playgroud)

我想创建一个SQL片段,在所有引用表"master"的表上执行更新:

update detail set master_id=value-new where master_id=value-new;
.....
Run Code Online (Sandbox Code Playgroud)

在内省的帮助下,这应该是可能的.

我用postgres.

更新

问题是,有许多表具有表"master"的外键.我想要一种方法来自动更新所有具有外键到主表的表.

sql postgresql introspection

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

在c ++中获取当前方法的名称

是否有(标准化)方法使用c ++获取当前方法的名称?

使用GNU GCC你可以通过使用宏__FUNCTION____PRETTY_FUNCTION__(由2个下划线包围)来实现这一点,但是,这当然是不可移植的.有没有办法在标准c ++中实现这一点或使其可移植?

c++ introspection

14
推荐指数
1
解决办法
6933
查看次数

如何使Spring接受流利(非虚空)的设置者?

我有一个API,我正在变成一个内部DSL.因此,我的PoJos中的大多数方法返回对此的引用,以便我可以声明性地将方法链接在一起(语法糖).

myComponent
    .setID("MyId")
    .setProperty("One")
    .setProperty2("Two")
    .setAssociation(anotherComponent)
    .execute();
Run Code Online (Sandbox Code Playgroud)

我的API不依赖于Spring,但我希望通过PoJo友好,零参数构造函数,getter和setter使其成为"Spring-Friendly".问题是,当我有一个非void返回类型时,Spring似乎没有检测到我的setter方法.

在将命令链接在一起时,返回类型非常方便,所以我不想破坏我的编程API,只是为了兼容Spring注入.

Spring中有一个设置允许我使用非void setter吗?

克里斯

java reflection spring fluent-interface introspection

14
推荐指数
3
解决办法
5720
查看次数