Este artículo necesita citas adicionales para su verificación . ( noviembre de 2014 ) |
Autor(es) original(es) | Lele Gaifax |
---|---|
Desarrollador(es) | Ronald Oussoren, Bill Bumgarner, Steve Majewski y otros. |
Lanzamiento inicial | Septiembre de 1996 ( 1996-09 ) |
Versión estable | 5.2 / 3 de abril de 2019 ( 03-04-2019 ) [1] |
Repositorio |
|
Escrito en | Pitón |
Sistema operativo | Multiplataforma |
Licencia | Licencia MIT |
Sitio web | pyobjc.readthedocs.io/en/latest/ |
PyObjC es un puente bidireccional entre los lenguajes de programación Python y Objective-C , que permite a los programadores utilizar y ampliar las bibliotecas Objective-C existentes , como el marco Cocoa de Apple , utilizando Python.
PyObjC se utiliza para desarrollar aplicaciones macOS en Python puro.
También hay soporte limitado para GNUstep , una implementación multiplataforma de código abierto de Cocoa.
El uso más importante de PyObjC es permitir a los programadores crear aplicaciones GUI utilizando bibliotecas Cocoa en Python puro. [2] Además, como efecto de la estrecha relación de Objective-C con el lenguaje de programación C (es un superconjunto puro), los desarrolladores también pueden incorporar cualquier API basada en C envolviéndola con un contenedor Objective-C y luego usando el código envuelto sobre el puente PyObjC. Usando Objective-C++ , se puede hacer lo mismo con las bibliotecas C++ .
Los desarrolladores de Cocoa también pueden beneficiarse, ya que las tareas escritas en Python generalmente ocupan menos líneas que su equivalente en Objective-C. Esto puede ser una ventaja para ellos, ya que permite crear prototipos más rápido.
Los orígenes de PyObjC se remontan a 1996, cuando Lele Gaifax construyó el módulo original en septiembre de ese año. [3] Entre los contribuyentes acreditados se encontraba Guido van Rossum, creador del lenguaje de programación Python.
PyObjC fue reescrito en 2002. Entre las incorporaciones notables se incluyen la capacidad de subclasificar directamente clases Objective-C desde Python y un soporte casi completo para los marcos Foundation, App Kit y Address Book.
Más tarde, ese mismo año, se agregó soporte para compilaciones de Python que no fueran de framework, así como soporte posterior para la distribución de Python incluida con Mac OS X. Junto con estos cambios, llegaron plantillas de proyecto para aplicaciones Cocoa independientes para usar con Project Builder , el predecesor del IDE de la plataforma Apple actual , Xcode .
Apple incorporó PyObjC a Mac OS X en 2007, con el lanzamiento de Mac OS X 10.5 Leopard . [4]
En Objective-C, los objetos se comunican entre sí mediante el envío de mensajes, lo que es análogo a las llamadas a métodos en otros lenguajes orientados a objetos. Cuando un objeto recibe un mensaje, busca el nombre del mensaje, o selector, y lo compara con un método designado con el mismo selector, que luego invoca.
La sintaxis de estas expresiones de mensajes se hereda de Smalltalk y aparece como un objeto, llamado receptor, ubicado a la izquierda del nombre del mensaje o selector, y ambos están encerrados entre un par de corchetes (la sintaxis de corchetes no se hereda de Smalltalk). Los dos puntos dentro de un selector indican que acepta uno o más argumentos, uno por cada dos puntos. Con el objetivo de mejorar la legibilidad del código, los dos puntos se colocan dentro del selector de tal manera que cuando los argumentos requeridos están en su lugar, la intención de la expresión es inequívoca:
[ myLittleDuck makeSomeNoise : graznido ojosCerrados : @YES onOneFoot : @YES ];
Esto es distinto de la sintaxis utilizada en Python y en muchos otros lenguajes, donde una expresión equivalente sería:
myLittleDuck . makeSomeNoise_eyesClosed_onOneFoot_ ( quack , Verdadero , Verdadero )
La traducción de los selectores de Objective-C a nombres de métodos de Python se logra reemplazando cada dos puntos con un solo guión bajo y enumerando los argumentos dentro de un par de paréntesis al final, como se demuestra arriba.
Las clases Objective-C se subclasifican de la misma manera que una clase Python normal:
clase MyDuck ( NSObject ): # NSObject es una clase base Objective-C. def init ( self ): self = super ( MyDuck , self ) . init () # Un modismo Objective-C, en el que la # instancia de la subclase, self, se instancia # enviando a la superclase su # inicializador designado. return selfmiPequeñoPatoUno = MiPato . alloc () . init ()