diff --git a/TRANSLATORS b/TRANSLATORS index 5f300889fa..ee85b32edf 100644 --- a/TRANSLATORS +++ b/TRANSLATORS @@ -47,6 +47,7 @@ David Trigo Chávez (@dtrinf) Agustina Quiros (@qagustina) Luis Llave (@llaveluis) Marcos Sánchez Provencio (@rapto) +Francisco Jesús Sevilla García (@fjsevilla-dev) María Camila Guerrero Giraldo (@macaguegi) José Miguel Hernández Cabrera (@miguelheca) María Andrea Vignau (@mavignau @marian-vignau) diff --git a/dictionaries/howto_descriptor.txt b/dictionaries/howto_descriptor.txt new file mode 100644 index 0000000000..76567bc815 --- /dev/null +++ b/dictionaries/howto_descriptor.txt @@ -0,0 +1,2 @@ +redefiniendo +monitorizar diff --git a/howto/descriptor.po b/howto/descriptor.po index 9856113d61..4560005e25 100644 --- a/howto/descriptor.po +++ b/howto/descriptor.po @@ -6,47 +6,49 @@ # Check https://github.com/PyCampES/python-docs-es/blob/3.8/TRANSLATORS to # get the list of volunteers # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-05-05 12:54+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-08-20 15:05+0200\n" "Language-Team: python-doc-es\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.8.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Last-Translator: Francisco Jesús Sevilla García \n" +"Language: es\n" +"X-Generator: Poedit 2.4.1\n" #: ../Doc/howto/descriptor.rst:3 msgid "Descriptor HowTo Guide" -msgstr "" +msgstr "Guía práctica de uso de los descriptores" #: ../Doc/howto/descriptor.rst msgid "Author" -msgstr "" +msgstr "Autor" #: ../Doc/howto/descriptor.rst:5 msgid "Raymond Hettinger" -msgstr "" +msgstr "Raymond Hettinger" #: ../Doc/howto/descriptor.rst msgid "Contact" -msgstr "" +msgstr "Contacto" #: ../Doc/howto/descriptor.rst:6 msgid "" -msgstr "" +msgstr "" #: ../Doc/howto/descriptor.rst:8 msgid "Contents" -msgstr "" +msgstr "Contenidos" #: ../Doc/howto/descriptor.rst:11 msgid "Abstract" -msgstr "" +msgstr "Resumen" #: ../Doc/howto/descriptor.rst:13 msgid "" @@ -56,6 +58,11 @@ msgid "" "methods. Shows how each works by giving a pure Python equivalent and a " "sample application." msgstr "" +"Definir los descriptores, resumir el protocolo y mostrar como los " +"descriptores son llamados. Estudiar un descriptor personalizado y varios " +"descriptores de Python incorporados, incluidas funciones, propiedades, " +"métodos estáticos y métodos de clase. Mostrar como funciona cada uno " +"proporcionando un equivalente puro de Python y un ejemplo de aplicación." #: ../Doc/howto/descriptor.rst:18 msgid "" @@ -63,10 +70,13 @@ msgid "" "creates a deeper understanding of how Python works and an appreciation for " "the elegance of its design." 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." #: ../Doc/howto/descriptor.rst:24 msgid "Definition and Introduction" -msgstr "" +msgstr "Definición e introducción" #: ../Doc/howto/descriptor.rst:26 msgid "" @@ -76,6 +86,11 @@ msgid "" "`__delete__`. If any of those methods are defined for an object, it is said " "to be a descriptor." msgstr "" +"En general, un descriptor es un atributo de objeto con \"comportamiento " +"vinculante\", dónde el acceso al atributo ha sido reemplazado por métodos en " +"el protocolo del descriptor. Esos métodos son :meth:`__get__`, :meth:" +"`__set__` y :meth:`__delete__`. Si alguno de esos métodos está definido para " +"un objeto, se dice que es un descriptor." #: ../Doc/howto/descriptor.rst:32 msgid "" @@ -88,6 +103,15 @@ msgid "" "method instead. Where this occurs in the precedence chain depends on which " "descriptor methods were defined." 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 " +"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." #: ../Doc/howto/descriptor.rst:41 msgid "" @@ -98,22 +122,28 @@ msgid "" "underlying C-code and offer a flexible set of new tools for everyday Python " "programs." msgstr "" +"Los descriptores son un potente protocolo de propósito general. Son el " +"mecanismo detrás de las propiedades, métodos, métodos estáticos, métodos de " +"clase y :func:`super()`. Se utilizan en todo Python para implementar las " +"clases de nuevo estilo introducidas en la versión 2.2. Los descriptores " +"simplifican el código C subyacente y ofrecen un conjunto flexible de nuevas " +"herramientas para los programas de Python cotidianos." #: ../Doc/howto/descriptor.rst:49 msgid "Descriptor Protocol" -msgstr "" +msgstr "Protocolo descriptor" #: ../Doc/howto/descriptor.rst:51 msgid "``descr.__get__(self, obj, type=None) -> value``" -msgstr "" +msgstr "``descr.__get__(self, obj, type=None) -> value``" #: ../Doc/howto/descriptor.rst:53 msgid "``descr.__set__(self, obj, value) -> None``" -msgstr "" +msgstr "``descr.__set__(self, obj, value) -> None``" #: ../Doc/howto/descriptor.rst:55 msgid "``descr.__delete__(self, obj) -> None``" -msgstr "" +msgstr "``descr.__delete__(self, obj) -> None``" #: ../Doc/howto/descriptor.rst:57 msgid "" @@ -121,6 +151,9 @@ msgid "" "considered a descriptor and can override default behavior upon being looked " "up as an attribute." msgstr "" +"Eso es todo lo que hay que hacer. Si se define cualquiera de estos métodos, " +"el objeto se considera un descriptor y puede anular el comportamiento " +"predeterminado al ser buscado como un atributo." #: ../Doc/howto/descriptor.rst:61 msgid "" @@ -129,6 +162,10 @@ msgid "" "non-data descriptors (they are typically used for methods but other uses are " "possible)." msgstr "" +"Si un objeto define :meth:`__set__` o :meth:`__delete__`, se considera un " +"descriptor de datos. Los descriptores que solo definen :meth:`__get__` se " +"denominan descriptores de no-datos (normalmente se utilizan para métodos, " +"pero son posibles otros usos)." #: ../Doc/howto/descriptor.rst:66 msgid "" @@ -138,6 +175,12 @@ 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 " +"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 " +"diccionario de una instancia tiene una entrada con el mismo nombre que un " +"descriptor de no-datos, la entrada del diccionario tiene prioridad." #: ../Doc/howto/descriptor.rst:72 msgid "" @@ -146,16 +189,23 @@ 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:" +"`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:79 msgid "Invoking Descriptors" -msgstr "" +msgstr "Invocar descriptores" #: ../Doc/howto/descriptor.rst:81 msgid "" "A descriptor can be called directly by its method name. For example, ``d." "__get__(obj)``." msgstr "" +"Un descriptor puede ser llamado directamente mediante el nombre de su " +"método. Por ejemplo ``d.__get__(obj)``." #: ../Doc/howto/descriptor.rst:84 msgid "" @@ -165,11 +215,18 @@ msgid "" "then ``d.__get__(obj)`` is invoked according to the precedence rules listed " "below." msgstr "" +"Alternativamente, es más común que un descriptor se invoque automáticamente " +"al acceder a un atributo. Por ejemplo, ``obj.d`` busca ``d`` en el " +"diccionario de ``obj``. Si ``d`` define el método :meth:`__get__`, entonces " +"se invoca ``d.__get__(obj)`` de acuerdo con las reglas de precedencia que se " +"enumeran a continuación." #: ../Doc/howto/descriptor.rst:89 msgid "" "The details of invocation depend on whether ``obj`` is an object or a class." msgstr "" +"Los detalles de la invocación dependen de si ``obj`` es un objeto o una " +"clase." #: ../Doc/howto/descriptor.rst:91 msgid "" @@ -181,6 +238,14 @@ msgid "" "The full C implementation can be found in :c:func:" "`PyObject_GenericGetAttr()` in :source:`Objects/object.c`." msgstr "" +"Para los objetos, el mecanismo se encuentra en :meth:`object." +"__getattribute__` que transforma ``b.x`` en ``type(b).__dict__['x']." +"__get__(b, type(b))``. La implementación funciona a través de una cadena de " +"precedencia que da a los descriptores de datos prioridad sobre las variables " +"de instancia, a las variables de instancia prioridad sobre los descriptores " +"de no-datos y asigna la prioridad más baja a :meth:`__getattr__` si se " +"proporciona. La implementación completa en C se puede encontrar en :c:func:" +"`PyObject_GenericGetAttr()` en :source:`Objects/object.c`." #: ../Doc/howto/descriptor.rst:99 msgid "" @@ -188,32 +253,42 @@ msgid "" "transforms ``B.x`` into ``B.__dict__['x'].__get__(None, B)``. In pure " "Python, it looks like::" msgstr "" +"Para clases, el mecanismo se define en :meth:`type.__getattribute__` que " +"transforma ``B.x`` en ``B.__dict__['x'].__get__(None, B)``. En Python puro, " +"quedaría así::" #: ../Doc/howto/descriptor.rst:110 msgid "The important points to remember are:" -msgstr "" +msgstr "Los puntos importantes a recordar son:" #: ../Doc/howto/descriptor.rst:112 msgid "descriptors are invoked by the :meth:`__getattribute__` method" -msgstr "" +msgstr "los descriptores son invocados por el método :meth:`__getattribute__`" #: ../Doc/howto/descriptor.rst:113 msgid "overriding :meth:`__getattribute__` prevents automatic descriptor calls" msgstr "" +"redefinir :meth:`__getattribute__` evita las llamadas automáticas al " +"descriptor" #: ../Doc/howto/descriptor.rst:114 msgid "" ":meth:`object.__getattribute__` and :meth:`type.__getattribute__` make " "different calls to :meth:`__get__`." msgstr "" +":meth:`object.__getattribute__` y :meth:`type.__getattribute__` realizan " +"diferentes llamadas a :meth:`__get__`." #: ../Doc/howto/descriptor.rst:116 msgid "data descriptors always override instance dictionaries." msgstr "" +"los descriptores de datos siempre anulan los diccionarios de instancia." #: ../Doc/howto/descriptor.rst:117 msgid "non-data descriptors may be overridden by instance dictionaries." msgstr "" +"los descriptores de no-datos pueden ser reemplazados por los diccionarios de " +"instancia." #: ../Doc/howto/descriptor.rst:119 msgid "" @@ -225,6 +300,13 @@ msgid "" "not in the dictionary, ``m`` reverts to a search using :meth:`object." "__getattribute__`." msgstr "" +"El objeto devuelto por ``super()`` también tiene un método personalizado :" +"meth:`__getattribute__` para poder invocar descriptores. La búsqueda de " +"atributo ``super(B, obj).m`` busca ``obj.__class__.__mro__`` para la clase " +"base ``A`` inmediatamente después de ``B`` y luego devuelve ``A." +"__dict__['m'].__get__(obj, B)``. Si no es un descriptor, se devuelve ``m`` " +"sin cambios. Si no está en el diccionario, ``m`` revierte a una búsqueda " +"usando :meth:`object.__getattribute__`." #: ../Doc/howto/descriptor.rst:126 msgid "" @@ -232,6 +314,9 @@ msgid "" "`Objects/typeobject.c`. and 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`_." #: ../Doc/howto/descriptor.rst:132 msgid "" @@ -242,10 +327,16 @@ msgid "" "Likewise, classes can turn-off descriptor invocation by overriding :meth:" "`__getattribute__()`." msgstr "" +"Los detalles anteriores muestran que el mecanismo para los descriptores está " +"incrustado en los métodos :meth:`__getattribute__()` para :class:`object`, :" +"class:`type` y :func:`super`. Las clases heredan este mecanismo cuando " +"derivan de :class:`object` o mediante una metaclase que proporcione " +"funcionalidades similares. Del mismo modo, las clases pueden desactivar la " +"invocación del descriptor redefiniendo :meth:`__getattribute__()`." #: ../Doc/howto/descriptor.rst:141 msgid "Descriptor Example" -msgstr "" +msgstr "Ejemplo de descriptor" #: ../Doc/howto/descriptor.rst:143 msgid "" @@ -254,6 +345,11 @@ msgid "" "alternate approach that could do this for every attribute. However, this " "descriptor is useful for monitoring just a few chosen attributes::" msgstr "" +"El siguiente código crea una clase cuyos objetos son descriptores de datos " +"que imprimen un mensaje para cada lectura o escritura. Redefinir :meth:" +"`__getattribute__` es un enfoque alternativo que podría hacer esto para cada " +"atributo. Sin embargo, este descriptor es útil para monitorizar solo algunos " +"atributos elegidos::" #: ../Doc/howto/descriptor.rst:181 msgid "" @@ -262,27 +358,38 @@ msgid "" "Properties, bound methods, static methods, and class methods are all based " "on the descriptor protocol." msgstr "" +"El protocolo es simple y ofrece interesantes posibilidades. Varios casos de " +"uso son tan comunes que se han empaquetado en llamadas a funciones " +"individuales. Las propiedades, los métodos vinculados, los métodos estáticos " +"y los métodos de clase se basan en el protocolo descriptor." #: ../Doc/howto/descriptor.rst:188 msgid "Properties" -msgstr "" +msgstr "Propiedades" #: ../Doc/howto/descriptor.rst:190 msgid "" "Calling :func:`property` is a succinct way of building a data descriptor " "that triggers function calls upon access to an attribute. Its signature is::" msgstr "" +"Llamar a :func:`property` es una forma sucinta de construir un descriptor de " +"datos que desencadena llamadas a funciones al acceder a un atributo. Su " +"firma es::" #: ../Doc/howto/descriptor.rst:195 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 " +"``x``::" #: ../Doc/howto/descriptor.rst:203 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::" #: ../Doc/howto/descriptor.rst:243 msgid "" @@ -290,6 +397,9 @@ msgid "" "attribute access and then subsequent changes require the intervention of a " "method." msgstr "" +"La función incorporada :func:`property` es de ayuda cuando una interfaz de " +"usuario ha otorgado acceso a atributos y luego los cambios posteriores " +"requieren la intervención de un método." #: ../Doc/howto/descriptor.rst:247 msgid "" @@ -300,16 +410,25 @@ msgid "" "solution is to wrap access to the value attribute in a property data " "descriptor::" 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::" #: ../Doc/howto/descriptor.rst:263 msgid "Functions and Methods" -msgstr "" +msgstr "Funciones y métodos" #: ../Doc/howto/descriptor.rst:265 msgid "" "Python's object oriented features are built upon a function based " "environment. Using non-data descriptors, the two are merged seamlessly." msgstr "" +"Las características orientadas a objetos de Python se basan en un entorno " +"basado en funciones. Usando descriptores de no-datos, ambas se combinan " +"perfectamente." #: ../Doc/howto/descriptor.rst:268 msgid "" @@ -320,6 +439,13 @@ msgid "" "convention, the instance reference is called *self* but may be called *this* " "or any other variable name." msgstr "" +"Los diccionarios de clase almacenan los métodos como funciones. En una " +"definición de clase, los métodos se escriben usando :keyword:`def` o :" +"keyword:`lambda`, las herramientas habituales para crear funciones. Los " +"métodos solo difieren de las funciones regulares en que el primer argumento " +"está reservado para la instancia del objeto. Por convención en Python, la " +"referencia de instancia se llama *self* pero puede llamarse *this* o " +"cualquier otro nombre de variable." #: ../Doc/howto/descriptor.rst:275 msgid "" @@ -328,21 +454,30 @@ msgid "" "non-data descriptors which return bound methods when they are invoked from " "an object. In pure Python, it works like this::" msgstr "" +"Para admitir llamadas a métodos, las funciones incluyen el método :meth:" +"`__get__` para vincular métodos durante el acceso a atributos. Esto " +"significa que todas las funciones son descriptores de no-datos que devuelven " +"métodos enlazados cuando se invocan desde un objeto. En Python puro, " +"funciona así::" #: ../Doc/howto/descriptor.rst:288 msgid "" "Running 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::" #: ../Doc/howto/descriptor.rst:326 msgid "Static Methods and Class Methods" -msgstr "" +msgstr "Métodos estáticos y métodos de clase" #: ../Doc/howto/descriptor.rst:328 msgid "" "Non-data descriptors provide a simple mechanism for variations on the usual " "patterns of binding functions into methods." msgstr "" +"Los descriptores de no-datos proporcionan un mecanismo simple para " +"variaciones de los patrones habituales para vincular funciones en métodos." #: ../Doc/howto/descriptor.rst:331 msgid "" @@ -351,50 +486,55 @@ msgid "" "transforms an ``obj.f(*args)`` call into ``f(obj, *args)``. Calling ``klass." "f(*args)`` becomes ``f(*args)``." msgstr "" +"En resumen, 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)``." #: ../Doc/howto/descriptor.rst:336 msgid "This chart summarizes the binding and its two most useful variants:" msgstr "" +"Este cuadro resume el enlace (*binding*) y sus dos variantes más útiles:" #: ../Doc/howto/descriptor.rst:339 msgid "Transformation" -msgstr "" +msgstr "Transformación" #: ../Doc/howto/descriptor.rst:339 msgid "Called from an Object" -msgstr "" +msgstr "Llamado desde un objeto" #: ../Doc/howto/descriptor.rst:339 msgid "Called from a Class" -msgstr "" +msgstr "Llamado desde una clase" #: ../Doc/howto/descriptor.rst:342 msgid "function" -msgstr "" +msgstr "función" #: ../Doc/howto/descriptor.rst:342 msgid "f(obj, \\*args)" -msgstr "" +msgstr "f(obj, \\*args)" #: ../Doc/howto/descriptor.rst:342 ../Doc/howto/descriptor.rst:344 msgid "f(\\*args)" -msgstr "" +msgstr "f(\\*args)" #: ../Doc/howto/descriptor.rst:344 msgid "staticmethod" -msgstr "" +msgstr "método estático" #: ../Doc/howto/descriptor.rst:346 msgid "classmethod" -msgstr "" +msgstr "método de clase" #: ../Doc/howto/descriptor.rst:346 msgid "f(type(obj), \\*args)" -msgstr "" +msgstr "f(type(obj), \\*args)" #: ../Doc/howto/descriptor.rst:346 msgid "f(klass, \\*args)" -msgstr "" +msgstr "f(klass, \\*args)" #: ../Doc/howto/descriptor.rst:349 msgid "" @@ -404,12 +544,19 @@ msgid "" "result, the function becomes identically accessible from either an object or " "a class." msgstr "" +"Los métodos estáticos devuelven la función subyacente sin cambios. Llamar a " +"``c.f`` o ``C.f`` es equivalente a una búsqueda directa en ``object." +"__getattribute__(c, \"f\")`` o en ``object.__getattribute__(C, \"f\")``. " +"Como resultado, la función se vuelve idénticamente accesible desde un objeto " +"o una clase." #: ../Doc/howto/descriptor.rst:355 msgid "" "Good candidates for static methods are methods that do not reference the " "``self`` variable." msgstr "" +"Buenos candidatos para ser métodos estáticos son los métodos que no hacen " +"referencia a la variable ``self``." #: ../Doc/howto/descriptor.rst:358 msgid "" @@ -422,18 +569,31 @@ msgid "" "particular dataset. It can be called either from an object or the class: " "``s.erf(1.5) --> .9332`` or ``Sample.erf(1.5) --> .9332``." msgstr "" +"Por ejemplo, un paquete de estadística puede incluir una clase contenedora " +"para datos experimentales. La clase proporciona métodos normales para " +"calcular el promedio, la media, la mediana y otras estadísticas descriptivas " +"que dependen de los datos. Sin embargo, puede haber funciones útiles que " +"están relacionadas conceptualmente pero que no dependen de los datos. Por " +"ejemplo, ``erf(x)`` es una práctica rutinaria de conversión que surge en el " +"trabajo estadístico pero que no depende directamente de un conjunto de datos " +"en particular. Se puede llamar desde un objeto o la clase: ``s.erf(1.5) --" +"> .9332`` o ``Sample.erf(1.5) --> .9332``." #: ../Doc/howto/descriptor.rst:367 msgid "" "Since staticmethods return the underlying function with no changes, the " "example calls are unexciting::" msgstr "" +"Dado que los métodos estáticos devuelven la función subyacente sin cambios, " +"las llamadas de ejemplo carecen de interés::" #: ../Doc/howto/descriptor.rst:380 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í::" #: ../Doc/howto/descriptor.rst:392 msgid "" @@ -441,6 +601,9 @@ msgid "" "argument list before calling the function. This format is the same for " "whether the caller is an object or a class::" msgstr "" +"A diferencia de los métodos estáticos, los métodos de clase anteponen la " +"referencia de clase a la lista de argumentos antes de llamar a la función. " +"Este formato es el mismo si quien llama es un objeto o una clase::" #: ../Doc/howto/descriptor.rst:407 msgid "" @@ -450,13 +613,20 @@ msgid "" "classmethod :func:`dict.fromkeys` creates a new dictionary from a list 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:" #: ../Doc/howto/descriptor.rst:423 msgid "Now a new dictionary of unique keys can be constructed like this::" -msgstr "" +msgstr "Ahora se puede construir un nuevo diccionario de claves únicas así::" #: ../Doc/howto/descriptor.rst:428 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í::"