PyObjC - PyObjC
Autor (es) original (is) | Lele Gaifax |
---|---|
Desenvolvedor (s) | Ronald Oussoren, Bill Bumgarner, Steve Majewski, et al. |
lançamento inicial | Setembro de 1996 |
Versão estável | 5.2 / 3 de abril de 2019
|
Repositório | |
Escrito em | Pitão |
Sistema operacional | Plataforma cruzada |
Licença | Licença MIT |
Local na rede Internet | pyobjc |
PyObjC é uma ponte bidirecional entre o Python e Objective-C linguagens de programação, permitindo que programadores de usar e estender Objective-C existentes bibliotecas , como a Apple 's Cacau quadro , usando Python.
PyObjC é usado para desenvolver aplicativos macOS em Python puro.
Também há suporte limitado para GNUstep , uma implementação de plataforma cruzada de código aberto do Cocoa.
Para programadores Python
O uso mais importante do PyObjC é permitir que os programadores criem aplicativos GUI usando bibliotecas Cocoa em Python puro. Além disso, como um efeito da estreita relação de Objective-C com o C linguagem de programação (isto é um super-puro), promotores também são capazes de incorporar qualquer baseado em C API por envolvê-lo com um invólucro Objectivo-C e, em seguida, usando o código envolto sobre a ponte PyObjC. Usando Objective-C ++ , o mesmo pode ser feito com bibliotecas C ++ .
Para programadores Objective-C
Os desenvolvedores de Cocoa também podem se beneficiar, pois as tarefas escritas em Python geralmente levam menos linhas do que o equivalente em Objective-C. Isso pode ser usado a seu favor, pois permite uma prototipagem mais rápida.
História
As origens do PyObjC remontam a 1996, quando Lele Gaifax construiu o módulo original em setembro daquele ano. Entre os contribuintes creditados estava Guido van Rossum, criador da linguagem de programação Python.
PyObjC foi reescrito em 2002. Adições notáveis incluem a capacidade de criar subclasses diretas de classes Objective-C do Python e suporte quase completo para os frameworks Foundation, App Kit e Address Book.
Mais tarde no mesmo ano, foi adicionado suporte para a não-framework Python constrói, bem como o apoio posterior para a distribuição Python incluído no Mac OS X . Junto com essas mudanças, vieram os modelos de projeto para aplicativos Cocoa autônomos para uso com o Project Builder , o predecessor da atual plataforma IDE da Apple , Xcode .
A Apple incorporou o PyObjC ao Mac OS X em 2007, com o lançamento do Mac OS X 10.5 Leopard .
Mensagens e métodos
Em Objective-C, os objetos se comunicam enviando mensagens, o que é análogo às chamadas de método em outras linguagens orientadas a objetos. Quando um objeto recebe uma mensagem, ele procura o nome da mensagem, ou seletor, e o combina com um método designado com o mesmo seletor, que ele então chama.
A sintaxe para essas expressões de mensagem é herdada de Smalltalk e aparece como um objeto, chamado de receptor, colocado à esquerda do nome da mensagem, ou seletor, e ambos são colocados entre um par de colchetes (a sintaxe do colchete não é herdado de Smalltalk). Os dois pontos em um seletor indicam que ele aceita um ou mais argumentos, um para cada dois pontos. Com a intenção de melhorar a legibilidade do código, dois pontos são colocados no seletor de forma que, quando os argumentos necessários estiverem no lugar, a intenção da expressão seja inequívoca:
[myLittleDuck makeSomeNoise:quack eyesClosed:@YES onOneFoot:@YES];
Isso é diferente da sintaxe usada em Python e em muitas outras linguagens, em que uma expressão equivalente seria:
myLittleDuck.makeSomeNoise_eyesClosed_onOneFoot_(quack, True, True)
A tradução de seletores Objective-C para nomes de métodos Python é realizada substituindo cada dois-pontos por um único sublinhado e listando os argumentos dentro de um par de parênteses no final, conforme demonstrado acima.
Aulas
As classes Objective-C são divididas em subclasses da mesma maneira que uma classe normal do Python:
class MyDuck(NSObject): # NSObject is a base Objective-C class.
def init(self):
self = super(MyDuck, self).init() # An Objective-C idiom, wherein the
# subclass instance, self, is instantiated
# by sending the superclass its
# designated initializer.
return self
myLittleDuckOne = MyDuck.alloc().init()