gpt4 book ai didi

python - 从 Objective-C 调用 Python

转载 作者:太空狗 更新时间:2023-10-29 21:21:37 30 4
gpt4 key购买 nike

我正在开发一个 Python/ObjC 应用程序,我需要从 ObjC 调用我的 Python 类中的一些方法。我试过几种东西都没有成功。

  • 如何从 Objective-C 调用 Python 方法?
  • 我的 Python 类正在 Interface Builder 中实例化。如何从该实例调用方法?

最佳答案

使用 PyObjC。

它包含在 Leopard 及更高版本中。

>>> from Foundation import *
>>> a = NSArray.arrayWithObjects_("a", "b", "c", None)
>>> a
(
a,
b,
c
)
>>> a[1]
'b'
>>> a.objectAtIndex_(1)
'b'
>>> type(a)
<objective-c class NSCFArray at 0x7fff708bc178>

它甚至可以与 iPython 一起使用:

In [1]: from Foundation import *

In [2]: a = NSBundle.allFrameworks()

In [3]: ?a
Type: NSCFArray
Base Class: <objective-c class NSCFArray at 0x1002adf40>

`

要从 Objective-C 调用到 Python,最简单的方法是:

  • 在 Objective-C 中声明一个包含您要调用的 API 的抽象父类(super class)

  • 在类的@implementation 中创建方法的 stub 实现

  • 在 Python 中子类化该类并提供具体实现

  • 在创建具体子类实例的抽象父类(super class)上创建工厂方法

@interface Abstract : NSObject
- (unsigned int) foo: (NSString *) aBar;
+ newConcrete;
@end

@implementation Abstract
- (unsigned int) foo: (NSString *) aBar { return 42; }
+ newConcrete { return [[NSClassFromString(@"MyConcrete") new] autorelease]; }
@end

.....

class Concrete(Abstract):
def foo_(self, s): return s.length()

.....

x = [Abstract newFoo];
[x foo: @"bar"];

关于python - 从 Objective-C 调用 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com