关于python:为什么PyObjC文档如此糟糕?

关于python:为什么PyObjC文档如此糟糕?

Why is the PyObjC documentation so bad?

例如,http://developer.apple.com/cocoa/pyobjc.html仍然适用于OS X 10.4 Tiger,而不是10.5 Leopard ..而且这是Apple的官方文档..

官方PyObjC页面同样糟糕,http://pyobjc.sourceforge.net/

这太糟糕了,令人费解......我正在考虑学习Ruby主要是因为RubyCocoa的东西有更好的文档记录,并且有很多不错的教程(例如http://www.rubycocoa.com/),并且因为鞋子 GUI工具包..

即使是这个严重自动翻译的日语教程也比我能找到的其他文档更有用。

我想做的就是使用Cocoa GUI创建相当简单的Python应用程序。
任何人都可以了解可怕的文档,或者指出一些教程,这些教程不只是给你巨大的代码块,并假设你知道NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)的作用。


PyObjC缺乏文档的主要原因是有一个开发人员(我),而且大多数开发人员并不特别喜欢编写文档。因为PyObjC对我来说是一个侧面项目,所以我倾向于专注于功能和错误修正,因为这对我来说更有趣。

改进文档的最佳方法是自愿提供pyobjc-dev邮件列表的帮助。

顺便说一句:pythonmac-sig邮件列表(请参阅google)是一个在MacOSX上获得Python帮助的优秀资源(不仅仅是PyObjC)。


直言不讳:

如果你想成为一名有效的Cocoa程序员,你必须学习Objective-C。故事结局。

Python或Ruby都不能通过各自的桥梁替代Objective-C。您仍然必须了解Objective-C API,NSObject派生类固有的行为以及Cocoa的许多其他细节。

PyObjC和RubyCocoa是从Cocoa应用程序访问Python或Ruby功能的好方法,包括在Python或Ruby中构建Cocoa应用程序 - 如果不是全部的话 - 。但其中的成功建立在对Cocoa及其组成的Objective-C API的透彻理解之上。


我同意该教程存在缺陷,在您面前抛出随机,无法解释的代码。它引入了自动释放池和用户默认值等概念,但没有解释为什么你会想要它们("内存管理的自动释放池"几乎不是一个解释)。

那说......

basically all I want to do is write Cocoa applications without having to learn ObjC.

我担心目前你需要对ObjC有一个基本的把握,以便从任何使用Cocoa的语言中受益。 PyObjC,RubyCocoa,Nu和其他人都是最好的利基,所有这些都是由熟悉ObjC和Cocoa的细节的人开发的。

现在,如果您真实地看到这些桥接在脚本语言真正发挥作用时非常有用,而不是尝试使用它们构建整个应用程序,那么您将受益最多。虽然这已经完成了(使用LimeChat,我现在正在使用RubyCocoa编写的应用程序),但它很少见,很可能会持续一段时间。


我偶然发现了一个关于PyObjC / Cocoa的好教程:

http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/


汤姆和马丁的回答绝对是真的(在任何开源项目中,你会发现大多数贡献者特别感兴趣,好吧,开发;而不是在半相关的事情,如文档),但我不认为你最后的特定问题很适合PyObjC文档。

1
NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

NSThread是Cocoa API的一部分,因此在Apple上有记录,包括特定的方法+ detachNewThreadSelector:toTarget:withObject:(我在那里链接,但显然stackoverflow有解析它的错误)。 CocoaDev wiki也有一篇文章。

我不认为PyObjC尝试记录Cocoa是个好主意,除了一些如何在Python中使用它的基本示例。解释选择器也可能超出了PyObjC的范围,因为它们也是Objective-C的一个特性,而不是PyObjC的特征。


All I want to do is create fairly simple Python applications with Cocoa GUI's.. Can anyone shed light on the horrible documentation, or point me at some tutorials that don't just give you huge blocks of code and assume you know what NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) does..?

[...]

basically all I want to do is write Cocoa applications without having to learn ObjC.

虽然我基本同意Soeren的回应,但我会更进一步:

在没有对Objective C有所了解的情况下使用Cocoa之前需要很长时间.Cocoa不是独立于Objective C构建的抽象,它与它明确相关。您可以在上面引用的示例代码行中看到这一点:

1
NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

这是编写Objective C行的Python方法:

1
[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

现在,重要的是要注意这一行可以用两种方式看出:(1)作为Objective C的一行,或者(2)作为Cocoa框架的调用。我们通过语法将其视为(1)。我们将其视为(2),认识到NSThread是一个Cocoa框架,它提供了一组方便的功能。在这种情况下,这个特定的Cocoa框架使我们很容易让对象开始在新线程上做某事。

但是踢球者是这样的:这里的Cocoa框架(NSThread)以一种明确与框架编写的语言相关联的方式为我们提供这种方便的服务。也就是说,NSThread为我们提供了一个明确指代"选择器"的功能。 。事实上,选择器是关于Objective C如何工作的基本名称。

所以有一点问题。 Cocoa从根本上说是一个Objective-C创建,它的创建者在构建它时考虑了Objective C.我并不是说不可能将Cocoa功能的界面翻译成其他语言更自然的形式。只是当你改变Cocoa框架以停止引用"选择器"时,它就不再是Cocoa框架了。这是一个翻译版本。一旦你开始走这条路,我猜测事情变得非常混乱。你正在努力跟上苹果公司,因为他们更新了Cocoa,也许你会碰到Cocoa的某些部分,而这些部分只是不能很好地转换成新语言,无论如何。因此,像PyObjC这样的东西选择直接暴露Cocoa,其方式具有非常清晰和简单的相关性。正如他们在文档中所说:

In order to have a lossless and unambiguous translation between Objective-C messages and Python methods, the Python method name equivalent is simply the selector with colons replaced by underscores.

当然,它有点难看,它确实意味着你需要了解一些关于Objective-C的东西,但那是因为如果一个真正存在的替代方案不一定更好。


我对Objective C或Cocoa一无所知(但有很多关于Python的东西),但我现在正在PyObjc中编写一个相当复杂的应用程序。我是如何学习的?我为OSX选择了Cocoa Programming,并使用PyObjC完成了整本书(一个非常快速的过程)。只要忽略有关内存管理的任何内容,你就会很好。唯一需要注意的是,偶尔你必须使用像endSheetMethod这样的装饰器(实际上我认为这是我唯一能击中的装饰器):

1
2
3
@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

汤姆说的都是真的。许多开源项目都有专门的开发人员,很少有人对文档感兴趣。球门柱可以每天转移,这意味着文件不仅必须创建,而且必须维护。


这个答案不是很有帮助,但作为开发人员,我讨厌做文档。这是一个开源项目,很难找人做文档。


推荐阅读