我已经在PyObjC内脏中捅了一下,试图弄明白这一点。在编写Python方法时是否可以访问Objective-C的隐藏SEL _cmd
方法参数?它必须在某个时刻生成,但我不确定这个点是否是我的Python代码可以实现的。
我最感兴趣的是为了能够制作一个简单的PyObjC NSLog
文字宏:
def meth_(self, arg):
NSLog(u"%s called" % _cmd)
虽然我已经找到了其他方法在Python中进行这种日志记录(参见Jeremy的回答),所以在这一点上它对PyObjC桥的好奇心。
答案 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中使用相同的方法。