From 058f707d6af9fee0678dc81719e2a0f842e46022 Mon Sep 17 00:00:00 2001 From: Rodrigo Tobar Date: Mon, 6 Sep 2021 00:42:25 +0800 Subject: [PATCH 1/2] Traduce howto/descriptor.po MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit También ajusta el diccionario añadiendo nuevas palabras, y quitando otras que no son necesarias. Signed-off-by: Rodrigo Tobar --- dictionaries/howto_descriptor.txt | 7 +- howto/descriptor.po | 458 ++++++++++++++++++++++-------- 2 files changed, 346 insertions(+), 119 deletions(-) diff --git a/dictionaries/howto_descriptor.txt b/dictionaries/howto_descriptor.txt index 835d921c97..6b16d6485d 100644 --- a/dictionaries/howto_descriptor.txt +++ b/dictionaries/howto_descriptor.txt @@ -1,3 +1,8 @@ redefiniendo monitorizar -klass +Person +validador +validadores +validadora +classmethod +property diff --git a/howto/descriptor.po b/howto/descriptor.po index a1842be7db..da3e579c6a 100644 --- a/howto/descriptor.po +++ b/howto/descriptor.po @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2020, Python Software Foundation +# && Copyright (C) 2001-2020, Python Software Foundation # This file is distributed under the same license as the Python package. # Maintained by the python-doc-es workteam. # docs-es@python.org / @@ -11,15 +11,16 @@ msgstr "" "Project-Id-Version: Python 3.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-03-19 11:16+0100\n" -"PO-Revision-Date: 2020-08-20 15:05+0200\n" -"Last-Translator: Francisco Jesús Sevilla García \n" +"PO-Revision-Date: 2021-09-06 00:30+0800\n" +"Last-Translator: Rodrigo Tobar \n" "Language: es\n" "Language-Team: python-doc-es\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.8.0\n" +"X-Generator: Poedit 2.4.2\n" #: ../Doc/howto/descriptor.rst:5 msgid "Descriptor HowTo Guide" @@ -50,22 +51,29 @@ msgid "" ":term:`Descriptors ` let objects customize attribute lookup, " "storage, and deletion." msgstr "" +"Los :term:`descriptores ` permiten a objetos personalizar la " +"búsqueda, almacenamiento y eliminación de atributos." #: ../Doc/howto/descriptor.rst:16 msgid "This guide has four major sections:" -msgstr "" +msgstr "Esta guía tiene cuatro secciones principales:" #: ../Doc/howto/descriptor.rst:18 msgid "" "The \"primer\" gives a basic overview, moving gently from simple examples, " "adding one feature at a time. Start here if you're new to descriptors." msgstr "" +"La guía introductoria da una visión general básica, moviéndose gentilmente " +"por ejemplos simples, añadiendo una funcionalidad a la vez. Comienza acá si " +"eres nuevo con los descriptores." #: ../Doc/howto/descriptor.rst:21 msgid "" "The second section shows a complete, practical descriptor example. If you " "already know the basics, start there." msgstr "" +"La segunda sección muestra un ejemplo completo y práctico de un descriptor. " +"Si ya sabes lo básico comienza acá." #: ../Doc/howto/descriptor.rst:24 msgid "" @@ -73,6 +81,9 @@ msgid "" "detailed mechanics of how descriptors work. Most people don't need this " "level of detail." msgstr "" +"La tercera sección provee un tutorial más técnico que adentra en la mecánica " +"detallada de cómo funcionan los descriptores. La mayoría de la gente no " +"necesita este nivel de detalle." #: ../Doc/howto/descriptor.rst:28 msgid "" @@ -81,38 +92,51 @@ msgid "" "bound methods or about the implementation of common tools like :func:" "`classmethod`, :func:`staticmethod`, :func:`property`, and :term:`__slots__`." msgstr "" +"La última sección tiene equivalentes en Python puro para descriptores " +"incorporados que están escritos en C. Lee esta sección si tienes curiosidad " +"de cómo las funciones se convierten en métodos vinculados, o sobre la " +"implementación de herramientas comunes como :func:`classmethod`, :func:" +"`staticmethod`, :func:`property`, y :term:`__slots__`." #: ../Doc/howto/descriptor.rst:36 msgid "Primer" -msgstr "" +msgstr "Guía introductoria" #: ../Doc/howto/descriptor.rst:38 msgid "" "In this primer, we start with the most basic possible example and then we'll " "add new capabilities one by one." msgstr "" +"En esta guía introductoria comenzamos con el ejemplo más básico posible y " +"luego vamos añadiendo nuevas funcionalidades una a una." #: ../Doc/howto/descriptor.rst:43 msgid "Simple example: A descriptor that returns a constant" -msgstr "" +msgstr "Ejemplo simple: un descriptor que retorna una constante" #: ../Doc/howto/descriptor.rst:45 msgid "" "The :class:`Ten` class is a descriptor that always returns the constant " "``10`` from its :meth:`__get__` method:" msgstr "" +"La clase :class:`Ten` es un descriptor que siempre retorna el valor " +"constante ``10`` desde su método :meth:`__get__`:" #: ../Doc/howto/descriptor.rst:54 msgid "" "To use the descriptor, it must be stored as a class variable in another " "class:" msgstr "" +"Para usar el descriptor, éste se debe almacenar como una variable de clase " +"en otra clase:" #: ../Doc/howto/descriptor.rst:62 msgid "" "An interactive session shows the difference between normal attribute lookup " "and descriptor lookup:" msgstr "" +"Una sesión interactiva muestra la diferencia entre un la búsqueda de " +"atributo normal y la búsqueda a través del descriptor:" #: ../Doc/howto/descriptor.rst:73 msgid "" @@ -121,39 +145,52 @@ msgid "" "operator finds a descriptor instance, recognized by its ``__get__`` method, " "and calls that method which returns ``10``." msgstr "" +"En la búsqueda de atributo ``a.x``, el operador punto busca la llave ``x`` y " +"el valor ``5`` en el diccionario de la clase. En la búsqueda ``a.y``, el " +"operador punto encuentra una instancia de un descriptor, reconocible por su " +"método ``__get__``, e invoca este método, el cual retorna ``10``." #: ../Doc/howto/descriptor.rst:78 msgid "" "Note that the value ``10`` is not stored in either the class dictionary or " "the instance dictionary. Instead, the value ``10`` is computed on demand." msgstr "" +"Nota que el valor ``10`` no es almacenado ni en el diccionario de la clase " +"ni en el diccionario de la instancia. En cambio, el valor ``10`` es " +"calculado bajo demanda." #: ../Doc/howto/descriptor.rst:81 msgid "" "This example shows how a simple descriptor works, but it isn't very useful. " "For retrieving constants, normal attribute lookup would be better." msgstr "" +"Este ejemplo muestra cómo funciona un descriptor simple, pero no es muy " +"útil. Para recuperar constantes una búsqueda de atributos normal sería mejor." #: ../Doc/howto/descriptor.rst:84 msgid "" "In the next section, we'll create something more useful, a dynamic lookup." -msgstr "" +msgstr "En la próxima sección crearemos algo más útil, una búsqueda dinámica." #: ../Doc/howto/descriptor.rst:88 msgid "Dynamic lookups" -msgstr "" +msgstr "Búsquedas dinámicas" #: ../Doc/howto/descriptor.rst:90 msgid "" "Interesting descriptors typically run computations instead of returning " "constants:" msgstr "" +"Descriptores interesantes típicamente ejecutan cálculos en vez de retornar " +"constantes:" #: ../Doc/howto/descriptor.rst:109 msgid "" "An interactive session shows that the lookup is dynamic — it computes " "different, updated answers each time::" msgstr "" +"Una sesión interactiva muestra que la búsqueda es dinámica — calcula " +"respuestas diferentes y actualizadas en cada ocasión::" #: ../Doc/howto/descriptor.rst:122 msgid "" @@ -164,10 +201,16 @@ msgid "" "that lets the :meth:`__get__` method learn the target directory. The " "*objtype* parameter is the class *Directory*." msgstr "" +"Además de mostrar cómo los descriptores puede ejecutar cálculos, este " +"ejemplo también revela el propósitos de los parámetros de :meth:`__get__`. " +"El parámetro *self* es *size*, una instancia de *DirectorySize*. El " +"parámetro *obj* es *g* o *s*, una instancia de *Directory*. Es el parámetro " +"*obj* el que permite que al método :meth:`__get__` saber el directorio " +"objetivo. El parámetro *objtype* es una clase *Directory*." #: ../Doc/howto/descriptor.rst:131 msgid "Managed attributes" -msgstr "" +msgstr "Atributos gestionados" #: ../Doc/howto/descriptor.rst:133 msgid "" @@ -177,6 +220,11 @@ msgid "" "dictionary. The descriptor's :meth:`__get__` and :meth:`__set__` methods " "are triggered when the public attribute is accessed." msgstr "" +"Un uso popular de descriptores es la gestión de acceso a datos de una " +"instancia. El descriptor se asigna a un atributo público en el diccionario " +"de clase, mientras que los datos reales se guardan en atributos privados en " +"el diccionario de instancia. Los métodos :meth:`__get__` and :meth:`__set__` " +"del descriptor se activan cuando se accede al atributo público." #: ../Doc/howto/descriptor.rst:139 msgid "" @@ -184,12 +232,17 @@ msgid "" "private attribute. When the public attribute is accessed, the descriptor " "logs the lookup or update:" msgstr "" +"En el siguiente ejemplo, *age* es el atributo público y *_age* es el " +"atributo privado. Cuando el atributo público es accedido, el descriptor " +"registra la búsqueda o actualización:" #: ../Doc/howto/descriptor.rst:172 msgid "" "An interactive session shows that all access to the managed attribute *age* " "is logged, but that the regular attribute *name* is not logged:" msgstr "" +"Una sesión interactiva muestra que todos los accesos al atributo gestionado " +"*age* son registrados, pero que el atributo normal *name* no es registrado:" #: ../Doc/howto/descriptor.rst:206 msgid "" @@ -198,16 +251,22 @@ msgid "" "only have one logged attribute and that its name is unchangeable. In the " "next example, we'll fix that problem." msgstr "" +"Un gran problema con este ejemplo es que el nombre privado *_age* está " +"fijado en la clase *LoggedAgeAccess*. Esto significa que cada instancia " +"puede sólo puede registrar un atributo, y que su nombre no se puede cambiar. " +"En el siguiente ejemplo solucionaremos ese problema." #: ../Doc/howto/descriptor.rst:213 msgid "Customized names" -msgstr "" +msgstr "Nombres personalizados" #: ../Doc/howto/descriptor.rst:215 msgid "" "When a class uses descriptors, it can inform each descriptor about which " "variable name was used." msgstr "" +"Cuando una clase usa descriptores, puede informar a cada descriptor el " +"nombre se usó para la variable." #: ../Doc/howto/descriptor.rst:218 msgid "" @@ -217,6 +276,11 @@ msgid "" "can be recorded, giving each descriptor its own *public_name* and " "*private_name*:" msgstr "" +"En este ejemplo, la clase :class:`Person` tiene dos instancias de " +"descriptores, *name* y *age*. Cuando la clase :class:`Person` se define, " +"hace una retrollamada a :meth:`__set_name__` en *LoggedAccess* para que se " +"pueda registrar los nombres de los campos, dándole a cada descriptor su " +"propio *public_name* y *private_name*:" #: ../Doc/howto/descriptor.rst:256 msgid "" @@ -224,24 +288,29 @@ msgid "" "`__set_name__` so that the field names would be recorded. Here we call :" "func:`vars` to look up the descriptor without triggering it:" msgstr "" +"Una sesión interactiva muestra que la clase :class:`Person` ha llamado a :" +"meth:`__set_name__` para que los nombres de los campos sean registrados. " +"Aquí llamamos a :func:`vars` para ver el descriptor sin activarlos:" #: ../Doc/howto/descriptor.rst:267 msgid "The new class now logs access to both *name* and *age*:" -msgstr "" +msgstr "La nueva clase ahora registrar accesos tanto a *name* como a *age*:" #: ../Doc/howto/descriptor.rst:284 msgid "The two *Person* instances contain only the private names::" -msgstr "" +msgstr "Las dos instancias de *Person* contienen sólo dos nombres privados::" #: ../Doc/howto/descriptor.rst:293 msgid "Closing thoughts" -msgstr "" +msgstr "Pensamientos finales" #: ../Doc/howto/descriptor.rst:295 msgid "" "A :term:`descriptor` is what we call any object that defines :meth:" "`__get__`, :meth:`__set__`, or :meth:`__delete__`." msgstr "" +"Llamamos un :term:`descriptor` a cualquier objeto que define :meth:" +"`__get__`, :meth:`__set__` o :meth:`__delete__`." #: ../Doc/howto/descriptor.rst:298 msgid "" @@ -250,6 +319,11 @@ msgid "" "it was created or the name of class variable it was assigned to. (This " "method, if present, is called even if the class is not a descriptor.)" msgstr "" +"Opcionalmente, los descriptores pueden tener un método :meth:`__set_name__`. " +"Éste sólo se usa en los casos en los que el descriptor necesita saber ya sea " +"la clase donde fue creado, o el nombre de la variable de clase a la que fue " +"asignado. (Este método, si está presente, es llamada incluso si la clase no " +"es un descriptor.)" #: ../Doc/howto/descriptor.rst:303 msgid "" @@ -257,18 +331,27 @@ msgid "" "a descriptor is accessed indirectly with ``vars(some_class)" "[descriptor_name]``, the descriptor instance is returned without invoking it." msgstr "" +"Los descriptores son invocados por el \"operator\" punto durante la búsqueda " +"de atributos. Si un descriptor es accedido indirectamente con " +"``vars(una_clase)[nombre_del_descriptor]``, la instancia del descriptor es " +"retornada sin ser invocada." #: ../Doc/howto/descriptor.rst:307 msgid "" "Descriptors only work when used as class variables. When put in instances, " "they have no effect." msgstr "" +"Los descriptores sólo funcionan cuando se usan como variables de clase. " +"Cuando son puestos en una instancia no tienen efecto." #: ../Doc/howto/descriptor.rst:310 msgid "" "The main motivation for descriptors is to provide a hook allowing objects " "stored in class variables to control what happens during attribute lookup." msgstr "" +"La mayor motivación detrás de los descriptores es el proveer un gancho que " +"permita a los objetos guardados en variables de clase controlar lo que " +"ocurre al buscar un atributo." #: ../Doc/howto/descriptor.rst:313 msgid "" @@ -276,6 +359,9 @@ msgid "" "Descriptors invert that relationship and allow the data being looked-up to " "have a say in the matter." msgstr "" +"Tradicionalmente, la clase que llama controla qué ocurre durante la " +"búsqueda. Los descriptores invierten esta relación y permiten que los datos " +"que están siendo buscados tengan algo qué decir al respecto." #: ../Doc/howto/descriptor.rst:317 msgid "" @@ -284,20 +370,26 @@ msgid "" "`staticmethod`, :func:`property`, and :func:`functools.cached_property` are " "all implemented as descriptors." msgstr "" +"Los descriptores se usan a través de todo el lenguaje. Es cómo funciones se " +"convierten en métodos vinculados. Herramientas comunes como :func:" +"`classmethod`, :func:`staticmethod`, :func:`property`, y :func:`functools." +"cached_property` se implementan todas como descriptores." #: ../Doc/howto/descriptor.rst:324 msgid "Complete Practical Example" -msgstr "" +msgstr "Ejemplo completo práctico" #: ../Doc/howto/descriptor.rst:326 msgid "" "In this example, we create a practical and powerful tool for locating " "notoriously hard to find data corruption bugs." msgstr "" +"En este ejemplo creamos una herramienta práctica y poderosa para encontrar " +"errores de corrupción de datos que son notoriamente difíciles de encontrar." #: ../Doc/howto/descriptor.rst:331 msgid "Validator class" -msgstr "" +msgstr "Clase validadora" #: ../Doc/howto/descriptor.rst:333 msgid "" @@ -306,31 +398,42 @@ msgid "" "restrictions. If those restrictions aren't met, it raises an exception to " "prevent data corruption at its source." msgstr "" +"Un validador es un descriptor que da acceso a un atributo gestionado. Antes " +"de almacenar cualquier dato, verifica que el nuevo valor cumple con varias " +"restricciones de tipo y rango. Si esas restricciones no se cumplen, lanza " +"una excepción para así prevenir corrupción de datos en su origen." #: ../Doc/howto/descriptor.rst:338 msgid "" "This :class:`Validator` class is both an :term:`abstract base class` and a " "managed attribute descriptor:" msgstr "" +"Esta clase :class:`Validator` es una tanto una :term:`clase base abstracta " +"` como un descriptor de un atributo gestionado:" #: ../Doc/howto/descriptor.rst:361 msgid "" "Custom validators need to inherit from :class:`Validator` and must supply a :" "meth:`validate` method to test various restrictions as needed." msgstr "" +"Validadores personalizados necesitan heredar de :class:`Validator` y deben " +"proveer un método :meth:`validate` method para probar las restricciones que " +"sean necesarias." #: ../Doc/howto/descriptor.rst:366 msgid "Custom validators" -msgstr "" +msgstr "Validadores personalizados" #: ../Doc/howto/descriptor.rst:368 msgid "Here are three practical data validation utilities:" -msgstr "" +msgstr "Acá hay tres utilidades de validación de datos prácticas:" #: ../Doc/howto/descriptor.rst:370 msgid "" ":class:`OneOf` verifies that a value is one of a restricted set of options." msgstr "" +":class:`OneOf` verifica que un valor está dentro de un grupo restringido de " +"opciones." #: ../Doc/howto/descriptor.rst:372 msgid "" @@ -338,6 +441,8 @@ msgid "" "`float`. Optionally, it verifies that a value is between a given minimum or " "maximum." msgstr "" +":class:`Number` verifica que un valor es :class:`int` o :class:`float`. " +"Opcionalmente verifica que un valor está entre un mínimo y un máximo." #: ../Doc/howto/descriptor.rst:376 msgid "" @@ -346,28 +451,35 @@ msgid "" "`predicate `_ " "as well." msgstr "" +":class:`String` verifica que un valor es un :class:`str`. Opcionalmente " +"valida que tenga un largo mínimo o máximo. Puede también validar un " +"`predicado `_ definido por el usuario." #: ../Doc/howto/descriptor.rst:435 msgid "Practical application" -msgstr "" +msgstr "Aplicación práctica" #: ../Doc/howto/descriptor.rst:437 msgid "Here's how the data validators can be used in a real class:" msgstr "" +"Acá se muestra cómo se puede usar los validadores de datos en una clase real:" #: ../Doc/howto/descriptor.rst:452 msgid "The descriptors prevent invalid instances from being created:" -msgstr "" +msgstr "Los descriptores previenen que se creen instancias inválidas:" #: ../Doc/howto/descriptor.rst:479 msgid "Technical Tutorial" -msgstr "" +msgstr "Tutorial técnico" #: ../Doc/howto/descriptor.rst:481 msgid "" "What follows is a more technical tutorial for the mechanics and details of " "how descriptors work." msgstr "" +"Lo que sigue es un tutorial más práctico sobre las mecánicas y detalles de " +"cómo funcionan los descriptores." #: ../Doc/howto/descriptor.rst:486 msgid "Abstract" @@ -378,19 +490,20 @@ msgid "" "Defines descriptors, summarizes the protocol, and shows how descriptors are " "called. Provides an example showing how object relational mappings work." msgstr "" +"Define los descriptores, resume el protocolo, y muestra cómo los " +"descriptores son llamados. Provee ejemplos mostrando cómo funcionan los " +"mapeos objeto-relacional (*ORM*)." #: ../Doc/howto/descriptor.rst:491 -#, fuzzy msgid "" "Learning about descriptors not only provides access to a larger toolset, it " "creates a deeper understanding of how Python works." msgstr "" -"Aprender acerca de los descriptores no solo brinda acceso a un conjunto de " -"herramientas mayor, sino que genera una comprensión más profunda de como " -"funciona Python y una apreciación sobre la elegancia de su diseño." +"Aprender acerca de los descriptores no sólo brinda acceso a un conjunto de " +"herramientas mayor, sino que genera una comprensión más profunda de cómo " +"funciona Python." #: ../Doc/howto/descriptor.rst:496 -#, fuzzy msgid "Definition and introduction" msgstr "Definición e introducción" @@ -401,9 +514,12 @@ msgid "" "`__set__`, and :meth:`__delete__`. If any of those methods are defined for " "an attribute, it is said to be a :term:`descriptor`." msgstr "" +"En general, un descriptor es un valor atributo que tiene uno de los métodos " +"del protocolo de descriptores. Estos métodos son :meth:`__get__`, :meth:" +"`__set__`, y :meth:`__delete__`. Si cualquiera de esos métodos se definen en " +"un atributo, se dice que éste es un :term:`descriptor`." #: ../Doc/howto/descriptor.rst:503 -#, fuzzy msgid "" "The default behavior for attribute access is to get, set, or delete the " "attribute from an object's dictionary. For instance, ``a.x`` has a lookup " @@ -417,12 +533,12 @@ msgstr "" "El comportamiento predeterminado para el acceso a los atributos es obtener, " "establecer o eliminar el atributo del diccionario de un objeto. Por ejemplo, " "``a.x`` tiene una cadena de búsqueda que comienza con ``a.__dict__['x']``, " -"luego ``type(a).__dict__['x']`` y continúa a través de las clases base de " -"``type(a)`` excluyendo metaclases. Si el valor buscado es un objeto que " -"define uno de los métodos del descriptor, entonces Python puede anular el " +"luego ``type(a).__dict__['x']`` y continúa a través del orden de resolución " +"de métodos de ``type(a)``. Si el valor buscado es un objeto que define uno " +"de los métodos de descriptores, entonces Python puede anular el " "comportamiento predeterminado e invocar el método del descriptor en su " -"lugar. El lugar donde ésto ocurre en la cadena de precedencia depende de qué " -"métodos del descriptor fueron definidos." +"lugar. El lugar donde esto ocurre en la cadena de precedencia depende de qué " +"métodos de descriptores fueron definidos." #: ../Doc/howto/descriptor.rst:512 msgid "" @@ -432,11 +548,15 @@ msgid "" "simplify the underlying C code and offer a flexible set of new tools for " "everyday Python programs." msgstr "" +"Los descriptores son un protocolo poderoso y de propósito general. Son el " +"mecanismo detrás de propiedades, métodos, métodos estáticos y :func:" +"`super()`. Se usan a través de Python mismo. Los descriptores simplifican el " +"código C subyacente y ofrecen un grupo flexible de nuevas herramientas para " +"programas habituales de Python." #: ../Doc/howto/descriptor.rst:520 -#, fuzzy msgid "Descriptor protocol" -msgstr "Protocolo descriptor" +msgstr "Protocolo de descriptores" #: ../Doc/howto/descriptor.rst:522 msgid "``descr.__get__(self, obj, type=None) -> value``" @@ -461,7 +581,6 @@ msgstr "" "predeterminado al ser buscado como un atributo." #: ../Doc/howto/descriptor.rst:532 -#, fuzzy msgid "" "If an object defines :meth:`__set__` or :meth:`__delete__`, it is considered " "a data descriptor. Descriptors that only define :meth:`__get__` are called " @@ -481,7 +600,7 @@ msgid "" "takes precedence. If an instance's dictionary has an entry with the same " "name as a non-data descriptor, the dictionary entry takes precedence." msgstr "" -"Los descriptores de datos y de no-datos difieren en como se calculan las " +"Los descriptores de datos y de no-datos difieren en cómo se calculan las " "anulaciones con respecto a las entradas en el diccionario de una instancia. " "Si el diccionario de una instancia tiene una entrada con el mismo nombre que " "un descriptor de datos, el descriptor de datos tiene prioridad. Si el " @@ -495,30 +614,31 @@ msgid "" "called. Defining the :meth:`__set__` method with an exception raising " "placeholder is enough to make it a data descriptor." msgstr "" -"Para crear un descriptor de datos de solo lectura, se define tanto :meth:" -"`__get__` como :meth:`__set__` donde :meth:`__set__` lanza un error :exc:" +"Para crear un descriptor de datos de sólo lectura, define tanto :meth:" +"`__get__` como :meth:`__set__` donde :meth:`__set__` lanza un :exc:" "`AttributeError` cuando es llamado. Definir el método :meth:`__set__` de " "forma que lance una excepción genérica es suficiente para convertirlo en un " "descriptor de datos." #: ../Doc/howto/descriptor.rst:550 msgid "Overview of descriptor invocation" -msgstr "" +msgstr "Visión general de invocación de descriptores" #: ../Doc/howto/descriptor.rst:552 -#, fuzzy msgid "" "A descriptor can be called directly with ``desc.__get__(obj)`` or ``desc." "__get__(None, cls)``." msgstr "" -"Un descriptor puede ser llamado directamente mediante el nombre de su " -"método. Por ejemplo ``d.__get__(obj)``." +"Un descriptor puede ser llamado directamente con ``desc.__get__(obj)`` o " +"``desc.__get__(None, cls)``." #: ../Doc/howto/descriptor.rst:555 msgid "" "But it is more common for a descriptor to be invoked automatically from " "attribute access." msgstr "" +"Pero es más común que un descriptor sea invocado automáticamente por la " +"búsqueda de atributos." #: ../Doc/howto/descriptor.rst:558 msgid "" @@ -527,19 +647,22 @@ msgid "" "instance ``__dict__``, its :meth:`__get__` method is invoked according to " "the precedence rules listed below." msgstr "" +"La expresión ``obj.x`` busca el atributo ``x`` en la cadena de nombres de " +"espacio de ``obj``. Si la búsqueda encuentra un descriptor fuera del " +"``__dict__`` de la instancia, su método :meth:`__get__` es invocado de " +"acuerdo a la lista de reglas de precedencia mostradas debajo." #: ../Doc/howto/descriptor.rst:563 -#, fuzzy msgid "" "The details of invocation depend on whether ``obj`` is an object, class, or " "instance of super." msgstr "" -"Los detalles de la invocación dependen de si ``obj`` es un objeto o una " -"clase." +"Los detalles de la invocación dependen de si ``obj`` es un objeto una clase, " +"o una instancia de super." #: ../Doc/howto/descriptor.rst:568 msgid "Invocation from an instance" -msgstr "" +msgstr "Invocación desde una instancia" #: ../Doc/howto/descriptor.rst:570 msgid "" @@ -548,18 +671,26 @@ msgid "" "descriptors, then class variables, and lastly :meth:`__getattr__` if it is " "provided." msgstr "" +"La búsqueda en instancias escanea a través de una cadena de nombres de " +"espacio dando la más alta prioridad a descriptores de datos, seguidos por " +"variables de instancia, luego descriptores de no-datos, luego variables de " +"clase, y finalmente a :meth:`__getattr__` si se provee." #: ../Doc/howto/descriptor.rst:575 msgid "" "If a descriptor is found for ``a.x``, then it is invoked with: ``desc." "__get__(a, type(a))``." msgstr "" +"Si se encuentra un descriptor para ``a.x`` entonces se invoca con ``desc." +"__get__(a, type(a))``." #: ../Doc/howto/descriptor.rst:578 msgid "" "The logic for a dotted lookup is in :meth:`object.__getattribute__`. Here " "is a pure Python equivalent:" msgstr "" +"La lógica para una búsqueda con puntos se encuentra en :meth:`object." +"__getattribute__`. Acá hay un equivalente en Python puro:" #: ../Doc/howto/descriptor.rst:698 msgid "" @@ -567,6 +698,10 @@ msgid "" "directly. Instead, both the dot operator and the :func:`getattr` function " "perform attribute lookup by way of a helper function:" msgstr "" +"Es Interesante que la búsqueda de atributos no llama directamente a :meth:" +"`object.__getattribute__`. En cambio, tanto el operador punto como la " +"función :func:`getattr` realizan la búsqueda de atributos a través de una " +"función auxiliar:" #: ../Doc/howto/descriptor.rst:713 msgid "" @@ -574,17 +709,21 @@ msgid "" "`__getattribute__` raises :exc:`AttributeError` (either directly or in one " "of the descriptor calls)." msgstr "" +"De tal modo, si :meth:`__getattr__` existe, es llamada cada vez que :meth:" +"`__getattribute__` lanza :exc:`AttributeError` (ya sea directamente o en una " +"de las llamadas a un descriptor)." #: ../Doc/howto/descriptor.rst:716 msgid "" "Also, if a user calls :meth:`object.__getattribute__` directly, the :meth:" "`__getattr__` hook is bypassed entirely." msgstr "" +"Además, si un usuario llama directamente a :meth:`object.__getattribute__`, " +"el gancho en :meth:`__getattr__` es totalmente evitado." #: ../Doc/howto/descriptor.rst:721 -#, fuzzy msgid "Invocation from a class" -msgstr "Llamado desde una clase" +msgstr "Invocación desde una clase" #: ../Doc/howto/descriptor.rst:723 msgid "" @@ -593,26 +732,37 @@ msgid "" "__getattribute__` but the instance dictionary lookup is replaced by a search " "through the class's :term:`method resolution order`." msgstr "" +"La lógica para una búsqueda con puntos tal como ``A.x`` se encuentra en :" +"meth:`type.__getattribute__`. Los pasos son similares a los de :meth:`object." +"__getattribute__`, pero la búsqueda en el diccionario de instancia se " +"reemplaza por una búsqueda a través del :term:`orden de resolución de " +"métodos ` de la clase." #: ../Doc/howto/descriptor.rst:728 msgid "If a descriptor is found, it is invoked with ``desc.__get__(None, A)``." msgstr "" +"Si se encuentra un descriptor, se invoca con ``desc.__get__(None, A)``." #: ../Doc/howto/descriptor.rst:730 msgid "" "The full C implementation can be found in :c:func:`type_getattro()` and :c:" "func:`_PyType_Lookup()` in :source:`Objects/typeobject.c`." msgstr "" +"La implementación completa en C puede ser encontrada en :c:func:" +"`type_getattro()` y :c:func:`_PyType_Lookup()` en :source:`Objects/" +"typeobject.c`." #: ../Doc/howto/descriptor.rst:735 msgid "Invocation from super" -msgstr "" +msgstr "Invocación desde super" #: ../Doc/howto/descriptor.rst:737 msgid "" "The logic for super's dotted lookup is in the :meth:`__getattribute__` " "method for object returned by :class:`super()`." msgstr "" +"La lógica de la búsqueda con puntos para super está en el método :meth:" +"`__getattribute__` para el objeto retornado por :class:`super()`." #: ../Doc/howto/descriptor.rst:740 msgid "" @@ -621,55 +771,60 @@ msgid "" "returns ``B.__dict__['m'].__get__(obj, A)``. If not a descriptor, ``m`` is " "returned unchanged." msgstr "" +"Una búsqueda con puntos tal como ``super(A, obj).m`` busca ``obj.__class__." +"__mro__`` para la clase base ``B`` que sigue inmediatamente a ``A`` y luego " +"retorna ``B.__dict__['m'].__get__(obj, A)``. Si no es un descriptor, ``m`` " +"se retorna sin cambiar." #: ../Doc/howto/descriptor.rst:745 -#, fuzzy msgid "" "The full C implementation can be found in :c:func:`super_getattro()` in :" "source:`Objects/typeobject.c`. A pure Python equivalent can be found in " "`Guido's Tutorial `_." msgstr "" -"Los detalles de la implementación están en :c:func:`super_getattro()` en :" -"source:`Objects/typeobject.c` y un equivalente puro de Python se puede " -"encontrar en el `Guido's Tutorial`_." +"La implementación completa en C puede ser encontrada en :c:func:" +"`super_getattro()` en :source:`Objects/typeobject.c`. Un equivalente en " +"Python puro se puede encontrar en el `Guido's Tutorial `_." #: ../Doc/howto/descriptor.rst:752 msgid "Summary of invocation logic" -msgstr "" +msgstr "Resumen de la lógica de invocación" #: ../Doc/howto/descriptor.rst:754 msgid "" "The mechanism for descriptors is embedded in the :meth:`__getattribute__()` " "methods for :class:`object`, :class:`type`, and :func:`super`." msgstr "" +"El mecanismo de descriptores está embebido en los métodos :meth:" +"`__getattribute__()` de :class:`object`, :class:`type`, y :func:`super`." #: ../Doc/howto/descriptor.rst:757 msgid "The important points to remember are:" msgstr "Los puntos importantes a recordar son:" #: ../Doc/howto/descriptor.rst:759 -#, fuzzy msgid "Descriptors are invoked by the :meth:`__getattribute__` method." -msgstr "los descriptores son invocados por el método :meth:`__getattribute__`" +msgstr "Los descriptores son invocados por el método :meth:`__getattribute__`." #: ../Doc/howto/descriptor.rst:761 msgid "" "Classes inherit this machinery from :class:`object`, :class:`type`, or :func:" "`super`." msgstr "" +"Las clases heredan esta maquinaria desde :class:`object`, :class:`type`, o :" +"func:`super`." #: ../Doc/howto/descriptor.rst:764 -#, fuzzy msgid "" "Overriding :meth:`__getattribute__` prevents automatic descriptor calls " "because all the descriptor logic is in that method." msgstr "" -"redefinir :meth:`__getattribute__` evita las llamadas automáticas al " -"descriptor" +"Redefinir :meth:`__getattribute__` previene las llamadas automáticas a " +"descriptores porque toda la lógica de descriptores está en ese método." #: ../Doc/howto/descriptor.rst:767 -#, fuzzy msgid "" ":meth:`object.__getattribute__` and :meth:`type.__getattribute__` make " "different calls to :meth:`__get__`. The first includes the instance and may " @@ -677,24 +832,24 @@ msgid "" "includes the class." msgstr "" ":meth:`object.__getattribute__` y :meth:`type.__getattribute__` realizan " -"diferentes llamadas a :meth:`__get__`." +"diferentes llamadas a :meth:`__get__`. El primero incluye la instancia y " +"puede incluir la clase. El segundo establece ``None`` como instancia, y " +"siempre incluye la clase." #: ../Doc/howto/descriptor.rst:772 -#, fuzzy msgid "Data descriptors always override instance dictionaries." msgstr "" -"los descriptores de datos siempre anulan los diccionarios de instancia." +"Los descriptores de datos siempre anulan los diccionarios de instancia." #: ../Doc/howto/descriptor.rst:774 -#, fuzzy msgid "Non-data descriptors may be overridden by instance dictionaries." msgstr "" -"los descriptores de no-datos pueden ser reemplazados por los diccionarios de " +"Los descriptores de no-datos pueden ser reemplazados por los diccionarios de " "instancia." #: ../Doc/howto/descriptor.rst:778 msgid "Automatic name notification" -msgstr "" +msgstr "Notificación automática de nombre" #: ../Doc/howto/descriptor.rst:780 msgid "" @@ -705,16 +860,20 @@ msgid "" "with two arguments. The *owner* is the class where the descriptor is used, " "and the *name* is the class variable the descriptor was assigned to." msgstr "" +"A veces es deseable que un descriptor sepa qué nombre fue asignado a una " +"variable de clase. Cuando una nueva clase es creada, la metaclase :class:" +"`type` escanea el diccionario de la nueva clase. Si alguna de las entradas " +"es un descriptor, y si define :meth:`__set_name__`, ese método se llama con " +"dos argumentos. El argumento *owner* es la clase donde se usa el descriptor, " +"y *name* es la variable de clase a la cual el descriptor se asigna." #: ../Doc/howto/descriptor.rst:787 -#, fuzzy msgid "" "The implementation details are in :c:func:`type_new()` and :c:func:" "`set_names()` in :source:`Objects/typeobject.c`." msgstr "" -"Los detalles de la implementación están en :c:func:`super_getattro()` en :" -"source:`Objects/typeobject.c` y un equivalente puro de Python se puede " -"encontrar en el `Guido's Tutorial`_." +"Los detalles de la implementación están en :c:func:`type_new()` y :c:func:" +"`set_names()` en :source:`Objects/typeobject.c`." #: ../Doc/howto/descriptor.rst:790 msgid "" @@ -722,19 +881,25 @@ msgid "" "place at the time of class creation. If descriptors are added to the class " "afterwards, :meth:`__set_name__` will need to be called manually." msgstr "" +"Dado que la lógica de actualización está en :meth:`type.__new__`, las " +"notificaciones ocurren sólo al momento de crear la clase. Si se añade " +"descriptores a la clase más tarde, :meth:`__set_name__` tendrá que ser " +"llamado manualmente." #: ../Doc/howto/descriptor.rst:796 -#, fuzzy msgid "ORM example" -msgstr "Ejemplo de descriptor" +msgstr "Ejemplo de mapeos objeto-relacional (*ORM*)" #: ../Doc/howto/descriptor.rst:798 -#, python-format msgid "" "The following code is simplified skeleton showing how data descriptors could " "be used to implement an `object relational mapping `_." msgstr "" +"El siguiente código es un esqueleto simplificado que muestra cómo " +"descriptores de datos pueden ser usados para implementar un mapeo objeto-" +"relacional `_." #: ../Doc/howto/descriptor.rst:802 msgid "" @@ -742,6 +907,9 @@ msgid "" "Python instances only hold keys to the database's tables. Descriptors take " "care of lookups or updates:" msgstr "" +"La idea esencial es que los datos se almacenan en una base de datos externa. " +"Las instancias de Python sólo mantienen llaves a las tablas de la base de " +"datos. Los descriptores se hacen cargo de las búsquedas o actualizaciones:" #: ../Doc/howto/descriptor.rst:821 msgid "" @@ -749,20 +917,25 @@ msgid "" "org/wiki/Database_model>`_ that describe the schema for each table in a " "database:" msgstr "" +"Podemos usar la clase :class:`Field` para definir `modelos `_ que describen el esquema para " +"cada tabla en la base de datos:" #: ../Doc/howto/descriptor.rst:846 msgid "To use the models, first connect to the database::" -msgstr "" +msgstr "Para usar los modelos, primera conéctate a la base de datos::" #: ../Doc/howto/descriptor.rst:851 msgid "" "An interactive session shows how data is retrieved from the database and how " "it can be updated:" msgstr "" +"Una sesión interactiva muestra cómo los datos son obtenidos desde la base de " +"datos y cómo se pueden actualizar:" #: ../Doc/howto/descriptor.rst:896 msgid "Pure Python Equivalents" -msgstr "" +msgstr "Equivalentes en Python puro" #: ../Doc/howto/descriptor.rst:898 msgid "" @@ -771,13 +944,17 @@ msgid "" "in tools. Properties, bound methods, static methods, class methods, and \\_" "\\_slots\\_\\_ are all based on the descriptor protocol." msgstr "" +"El protocolo de descriptores es simple y ofrece posibilidades estimulantes. " +"Varios casos de uso son tan comunes que han sido pre-empaquetados en " +"herramientas incorporadas. Propiedades, métodos vinculados, métodos " +"estáticos, métodos de clase y \\_\\_slots\\_\\_ están todos basados en el " +"protocolo de descriptores." #: ../Doc/howto/descriptor.rst:905 msgid "Properties" msgstr "Propiedades" #: ../Doc/howto/descriptor.rst:907 -#, fuzzy msgid "" "Calling :func:`property` is a succinct way of building a data descriptor " "that triggers a function call upon access to an attribute. Its signature " @@ -788,21 +965,19 @@ msgstr "" "firma es::" #: ../Doc/howto/descriptor.rst:912 -#, fuzzy msgid "" "The documentation shows a typical use to define a managed attribute ``x``:" msgstr "" -"La documentación muestra un uso típico para definir un atributo administrado " +"La documentación muestra un uso típico para definir un atributo gestionado " "``x``::" #: ../Doc/howto/descriptor.rst:922 -#, fuzzy msgid "" "To see how :func:`property` is implemented in terms of the descriptor " "protocol, here is a pure Python equivalent:" msgstr "" -"Para ver cómo se implementa :func:`property` en términos del protocolo " -"descriptor, aquí hay un equivalente puro de Python::" +"Para ver cómo se implementa :func:`property` en términos del protocolo de " +"descriptores, aquí hay un equivalente puro de Python::" #: ../Doc/howto/descriptor.rst:1015 msgid "" @@ -815,7 +990,6 @@ msgstr "" "requieren la intervención de un método." #: ../Doc/howto/descriptor.rst:1019 -#, fuzzy msgid "" "For instance, a spreadsheet class may grant access to a cell value through " "``Cell('b10').value``. Subsequent improvements to the program require the " @@ -827,18 +1001,19 @@ msgstr "" "Por ejemplo, una clase de hoja de cálculo puede otorgar acceso al valor de " "una celda a través de ``Cell('b10').value``. Las mejoras posteriores del " "programa requieren que la celda se vuelva a calcular en cada acceso; sin " -"embargo, el programador no quiere afectar al código de cliente existente que " -"accede al atributo directamente. La solución es envolver el acceso al valor " -"del atributo en un descriptor de datos mediante una propiedad::" +"embargo, la programadora no quiere afectar al código de cliente existente " +"que accede al atributo directamente. La solución es envolver el acceso al " +"valor del atributo en un descriptor de datos propiedad::" #: ../Doc/howto/descriptor.rst:1036 msgid "" "Either the built-in :func:`property` or our :func:`Property` equivalent " "would work in this example." msgstr "" +"Tanto la función incorporada :func:`property` como nuestra equivalente :func:" +"`Property` funcionarían en este ejemplo." #: ../Doc/howto/descriptor.rst:1041 -#, fuzzy msgid "Functions and methods" msgstr "Funciones y métodos" @@ -858,12 +1033,19 @@ msgid "" "prepended to the other arguments. By convention, the instance is called " "*self* but could be called *this* or any other variable name." msgstr "" +"Las funciones almacenadas en diccionarios de clase son convertidas en " +"métodos cuando son invocadas. Los métodos sólo difieren de funciones " +"regulares en que la instancia del objeto es antepuesta a los otros " +"argumentos. Por convención, la instancia se llama *self*, pero podría ser " +"llamada *this* o cualquier otro nombre de variable." #: ../Doc/howto/descriptor.rst:1051 msgid "" "Methods can be created manually with :class:`types.MethodType` which is " "roughly equivalent to:" msgstr "" +"Los métodos se pueden crear manualmente con :class:`types.MethodType`, lo " +"que es aproximadamente equivalente a:" #: ../Doc/howto/descriptor.rst:1068 msgid "" @@ -872,54 +1054,71 @@ msgid "" "that functions are non-data descriptors that return bound methods during " "dotted lookup from an instance. Here's how it works:" msgstr "" +"Para soportar la creación automática de métodos, las funciones incluyen un " +"método :meth:`__get__` para vincular métodos durante el acceso a atributos. " +"Esto significa que las funciones son descriptores de no-datos que retornan " +"métodos vinculados durante la búsqueda con puntos desde una instancia. Así " +"es como funciona:" #: ../Doc/howto/descriptor.rst:1084 -#, fuzzy msgid "" "Running the following class in the interpreter shows how the function " "descriptor works in practice:" msgstr "" -"Ejecutar el intérprete muestra como funciona el descriptor de función en la " -"práctica::" +"Ejecutar la siguiente clase en el intérprete muestra cómo funciona el " +"descriptor de función en la práctica:" #: ../Doc/howto/descriptor.rst:1093 msgid "" "The function has a :term:`qualified name` attribute to support introspection:" msgstr "" +"La función tiene un atributo de :term:`nombre calificado ` " +"para soportar introspección:" #: ../Doc/howto/descriptor.rst:1100 msgid "" "Accessing the function through the class dictionary does not invoke :meth:" "`__get__`. Instead, it just returns the underlying function object::" msgstr "" +"Accediendo a la función a través del diccionario de clase no invoca :meth:" +"`__get__`. En cambio, retorna el objeto función subyacente:" #: ../Doc/howto/descriptor.rst:1106 msgid "" "Dotted access from a class calls :meth:`__get__` which just returns the " "underlying function unchanged::" msgstr "" +"Acceso con puntos desde una clase llama a :meth:`__get__`, lo cual sólo " +"retorna la función subyacente sin cambiar::" #: ../Doc/howto/descriptor.rst:1112 msgid "" "The interesting behavior occurs during dotted access from an instance. The " "dotted lookup calls :meth:`__get__` which returns a bound method object::" msgstr "" +"El comportamiento interesante ocurre durante el accesos con puntos desde una " +"instancia. Las búsquedas con punto llaman a :meth:`__get__`, el cual retorna " +"un objeto de método vinculado:" #: ../Doc/howto/descriptor.rst:1119 msgid "" "Internally, the bound method stores the underlying function and the bound " "instance::" msgstr "" +"Internamente, el método vinculado guarda la función subyacente y la " +"instancia vinculada:" #: ../Doc/howto/descriptor.rst:1128 msgid "" "If you have ever wondered where *self* comes from in regular methods or " "where *cls* comes from in class methods, this is it!" msgstr "" +"Si alguna vez te preguntaste de dónde viene *self* en métodos regulares, o " +"de dónde viene *cls* en métodos de clase, ¡es acá!" #: ../Doc/howto/descriptor.rst:1133 msgid "Other kinds of methods" -msgstr "" +msgstr "Otros tipos de métodos" #: ../Doc/howto/descriptor.rst:1135 msgid "" @@ -930,17 +1129,16 @@ msgstr "" "variaciones de los patrones habituales para vincular funciones en métodos." #: ../Doc/howto/descriptor.rst:1138 -#, fuzzy msgid "" "To recap, functions have a :meth:`__get__` method so that they can be " "converted to a method when accessed as attributes. The non-data descriptor " "transforms an ``obj.f(*args)`` call into ``f(obj, *args)``. Calling ``cls." "f(*args)`` becomes ``f(*args)``." msgstr "" -"En resumen, las funciones tienen un método :meth:`__get__` para que se " +"Para recapitular, las funciones tienen un método :meth:`__get__` para que se " "puedan convertir en un método cuando se accede a ellas como atributos. El " "descriptor de no-datos transforma una llamada a ``obj.f(*args)`` en ``f(obj, " -"*args)``. Llamar a ``klass.f(*args)`` se convierte en ``f(*args)``." +"*args)``. Llamar a ``cls.f(*args)`` se convierte en ``f(*args)``." #: ../Doc/howto/descriptor.rst:1143 msgid "This chart summarizes the binding and its two most useful variants:" @@ -952,12 +1150,10 @@ msgid "Transformation" msgstr "Transformación" #: ../Doc/howto/descriptor.rst:1146 -#, fuzzy msgid "Called from an object" msgstr "Llamado desde un objeto" #: ../Doc/howto/descriptor.rst:1146 -#, fuzzy msgid "Called from a class" msgstr "Llamado desde una clase" @@ -986,14 +1182,12 @@ msgid "f(type(obj), \\*args)" msgstr "f(type(obj), \\*args)" #: ../Doc/howto/descriptor.rst:1153 -#, fuzzy msgid "f(cls, \\*args)" -msgstr "f(klass, \\*args)" +msgstr "f(cls, \\*args)" #: ../Doc/howto/descriptor.rst:1158 -#, fuzzy msgid "Static methods" -msgstr "método estático" +msgstr "Métodos estáticos" #: ../Doc/howto/descriptor.rst:1160 msgid "" @@ -1039,7 +1233,6 @@ msgstr "" "> .9332`` o ``Sample.erf(1.5) --> .9332``." #: ../Doc/howto/descriptor.rst:1178 -#, fuzzy msgid "" "Since static methods return the underlying function with no changes, the " "example calls are unexciting:" @@ -1048,21 +1241,18 @@ msgstr "" "las llamadas de ejemplo carecen de interés::" #: ../Doc/howto/descriptor.rst:1195 -#, fuzzy msgid "" "Using the non-data descriptor protocol, a pure Python version of :func:" "`staticmethod` would look like this:" msgstr "" -"Usando el protocolo descriptor de no-datos, una versión pura de Python de :" -"func:`staticmethod` se vería así::" +"Usando el protocolo de descriptores de no-datos, una versión pura de Python " +"de :func:`staticmethod` se vería así::" #: ../Doc/howto/descriptor.rst:1211 -#, fuzzy msgid "Class methods" -msgstr "método de clase" +msgstr "Métodos de clase" #: ../Doc/howto/descriptor.rst:1213 -#, fuzzy msgid "" "Unlike static methods, class methods prepend the class reference to the " "argument list before calling the function. This format is the same for " @@ -1073,7 +1263,6 @@ msgstr "" "Este formato es el mismo si quien llama es un objeto o una clase::" #: ../Doc/howto/descriptor.rst:1231 -#, fuzzy msgid "" "This behavior is useful whenever the method only needs to have a class " "reference and does not rely on data stored in a specific instance. One use " @@ -1082,24 +1271,23 @@ msgid "" "of keys. The pure Python equivalent is:" msgstr "" "Este comportamiento es útil siempre que la función solo necesite tener una " -"referencia de clase y no preocuparse por los datos subyacentes. Un uso de " -"los métodos de clase es crear constructores de clase alternativos. En Python " -"2.3, el método de clase :func:`dict.fromkeys` crea un nuevo diccionario a " -"partir de una lista de claves. El equivalente puro de Python es:" +"referencia de clase y no necesita contar con los datos almacenados en una " +"instancia específica. Un uso de los métodos de clase es crear constructores " +"de clase alternativos. Por ejemplo, el método de clase :func:`dict.fromkeys` " +"crea un nuevo diccionario a partir de una lista de claves. El equivalente " +"puro de Python es:" #: ../Doc/howto/descriptor.rst:1248 -#, fuzzy msgid "Now a new dictionary of unique keys can be constructed like this:" -msgstr "Ahora se puede construir un nuevo diccionario de claves únicas así::" +msgstr "Ahora se puede construir un nuevo diccionario de claves únicas así:" #: ../Doc/howto/descriptor.rst:1258 -#, fuzzy msgid "" "Using the non-data descriptor protocol, a pure Python version of :func:" "`classmethod` would look like this:" msgstr "" -"Usando el protocolo descriptor de no-datos, una implementación pura en " -"Python de :func:`classmethod` se vería así::" +"Usando el protocolo de descriptores de no-datos, una implementación pura en " +"Python de :func:`classmethod` se vería así:" #: ../Doc/howto/descriptor.rst:1296 msgid "" @@ -1107,10 +1295,13 @@ msgid "" "makes it possible for :func:`classmethod` to support chained decorators. For " "example, a classmethod and property could be chained together:" msgstr "" +"La ruta de código para ``hasattr(obj, '__get__')`` fue añadida en Python " +"3.9, y hace posible que :func:`classmethod` soporte decoradores encadenados." +"Por ejemplo, classmethod y property se pueden encadenar:" #: ../Doc/howto/descriptor.rst:1315 msgid "Member objects and __slots__" -msgstr "" +msgstr "Objetos miembros y __slots__" #: ../Doc/howto/descriptor.rst:1317 msgid "" @@ -1118,18 +1309,26 @@ msgid "" "fixed-length array of slot values. From a user point of view that has " "several effects:" msgstr "" +"Cuando una clase define ``__slots__``, reemplaza los diccionarios de " +"instancia por un arreglo de valores de ranura de largo fijo. Desde el punto " +"de vista del usuario esto tiene varios efectos:" #: ../Doc/howto/descriptor.rst:1321 msgid "" "1. Provides immediate detection of bugs due to misspelled attribute " "assignments. Only attribute names specified in ``__slots__`` are allowed:" msgstr "" +"1. Provee detección inmediata de errores causados por asignación de " +"atributos mal deletreados. Sólo se permiten nombres de atributos " +"especificados en ``__slots__``:" #: ../Doc/howto/descriptor.rst:1337 msgid "" "2. Helps create immutable objects where descriptors manage access to private " "attributes stored in ``__slots__``:" msgstr "" +"2. Ayuda a crear objetos inmutables donde descriptores manejar el acceso a " +"atributos privados almacenados en ``__slots__``:" #: ../Doc/howto/descriptor.rst:1372 msgid "" @@ -1138,12 +1337,19 @@ msgid "" "design pattern `_ likely " "only matters when a large number of instances are going to be created." msgstr "" +"3. Ahorra memoria. En una compilación de 64 bits en Linux, una instancia con " +"dos atributos usa 48 bytes con ``__slots__`` y 152 bytes sin. Este `patrón " +"de diseño flyweight `_ probablemente sólo importa cuando una gran " +"cantidad de instancias será creada." #: ../Doc/howto/descriptor.rst:1377 msgid "" "4. Blocks tools like :func:`functools.cached_property` which require an " "instance dictionary to function correctly:" msgstr "" +"4. Bloquea a herramientas tales como :func:`functools.cached_property`, las " +"que requieren un diccionario de instancia para funcionar correctamente:" #: ../Doc/howto/descriptor.rst:1399 msgid "" @@ -1154,12 +1360,20 @@ msgid "" "``_slotvalues`` list. Reads and writes to that private structure are " "managed by member descriptors:" msgstr "" +"No es posible crear una versión exacta de ``__slots__`` en Python puro " +"porque requiere acceso directo a estructuras en C y control sobre asignación " +"de memoria de objetos. Sin embargo podemos construir una simulación casi " +"totalmente fiel donde la estructura real en C para las ranuras es emulada " +"con una lista privada ``_slotvalues``. Las lecturas y escrituras de esta " +"estructura privada se manejan con descriptores miembros:" #: ../Doc/howto/descriptor.rst:1442 msgid "" "The :meth:`type.__new__` method takes care of adding member objects to class " "variables:" msgstr "" +"El método :meth:`type.__new__` se hace cargo de añadir objetos miembros a " +"variables de clase:" #: ../Doc/howto/descriptor.rst:1458 msgid "" @@ -1167,27 +1381,35 @@ msgid "" "slots instead of an instance dictionary. Here is a rough simulation in pure " "Python:" msgstr "" +"El método :meth:`object.__new__` se hace cargo de crear instancias que " +"tienen ranuras en vez un diccionario de instancia. Acá hay una simulación " +"aproximada en Python puro:" #: ../Doc/howto/descriptor.rst:1493 msgid "" "To use the simulation in a real class, just inherit from :class:`Object` and " "set the :term:`metaclass` to :class:`Type`:" msgstr "" +"Para usar la simulación en una clase real, sólo hereda de :class:`Object` y " +"establece :term:`metaclass` a :class:`Type`:" #: ../Doc/howto/descriptor.rst:1507 msgid "" "At this point, the metaclass has loaded member objects for *x* and *y*::" msgstr "" +"En este punto, la metaclase ha cargado los objetos miembros para *x* e *y*::" #: ../Doc/howto/descriptor.rst:1528 msgid "" "When instances are created, they have a ``slot_values`` list where the " "attributes are stored:" msgstr "" +"Cuando se crean instancias, éstas tienen una lista ``slot_values`` donde se " +"almacenan los atributos:" #: ../Doc/howto/descriptor.rst:1540 msgid "Misspelled or unassigned attributes will raise an exception:" -msgstr "" +msgstr "Atributos mal deletreados o no asignados lazarán una excepción:" #~ msgid "" #~ "Defines descriptors, summarizes the protocol, and shows how descriptors " From 5144b16a0407c7fb31ff8bfb78fec584c26b779c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=C3=A1n=20Maureira-Fredes?= Date: Tue, 7 Sep 2021 13:43:19 +0200 Subject: [PATCH 2/2] Update howto/descriptor.po --- howto/descriptor.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/howto/descriptor.po b/howto/descriptor.po index da3e579c6a..0dcfc79caf 100644 --- a/howto/descriptor.po +++ b/howto/descriptor.po @@ -1,4 +1,4 @@ -# && Copyright (C) 2001-2020, Python Software Foundation +# Copyright (C) 2001-2020, Python Software Foundation # This file is distributed under the same license as the Python package. # Maintained by the python-doc-es workteam. # docs-es@python.org /