从Python访问Objective-C隐藏的_cmd参数

时间:2011-03-11 10:12:53

标签: objective-c nslog pyobjc

我已经在PyObjC内脏中捅了一下,试图弄明白这一点。在编写Python方法时是否可以访问Objective-C的隐藏SEL _cmd方法参数?它必须在某个时刻生成,但我不确定这个点是否是我的Python代码可以实现的。

我最感兴趣的是为了能够制作一个简单的PyObjC NSLog文字宏:

def meth_(self, arg):
    NSLog(u"%s called" % _cmd)

虽然我已经找到了其他方法在Python中进行这种日志记录(参见Jeremy的回答),所以在这一点上它对PyObjC桥的好奇心。

2 个答案:

答案 0 :(得分:3)

为什么不通过记录Python函数的名称来实现呢?然后,您可以应用Python方法来获取函数名称,例如抛出异常并在堆栈跟踪中进行调整,如this code snippet所示。

ETA: This code演示了Python 2.1中引入的先前代码段中提到的“更好的方式”:使用sys._getframe()。它简单得多。

答案 1 :(得分:-1)

我不熟悉Python。但是在objective-C而不是_cmd,您可以通过以下方式找到方法选择器:

const id* selfPtr = &self;
SEL sel = *(SEL*)(void*)(--selfPtr);

可能你可以在Python中使用相同的方法。