Доступ к скрытому аргументу _cmd Objective-C из Python - PullRequest
0 голосов
/ 11 марта 2011

Я довольно долго ковырялся во внутренностях PyObjC, пытаясь понять это. Можно ли получить доступ к скрытому аргументу SEL _cmd метода Objective-C при написании метода Python? Он должен быть сгенерирован в какой-то момент, но я не уверен, что это тот момент, когда мой код Python может добраться до него.

Меня это больше всего интересовало, чтобы можно было сделать простой текстовый макрос PyObjC NSLog:

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

хотя я нашел другие способы ведения такого рода регистрации в Python (см. Ответ Джереми), поэтому на данный момент это стало любопытством по поводу моста PyObjC.

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Почему бы не сделать это, указав вместо этого имя функции Python? Затем вы можете применить подход Python для получения имени функции, например, выбрасывать исключение и копаться в трассировке стека, как показано в этом фрагменте кода .

ETA: Этот код демонстрирует «лучший способ», упомянутый в предыдущем фрагменте, как он представлен в Python 2.1: использование sys._getframe(). Это гораздо проще.

0 голосов
/ 17 марта 2014

Я не знаком с Python. Но в target-C вместо _cmd вы можете найти селектор метода по:

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

Может быть, вы можете использовать тот же подход в Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...