1
0
Fork 0
python-docs-fr/howto/descriptor.po

1535 lines
63 KiB
Plaintext
Raw Permalink Normal View History

2018-07-04 09:06:45 +00:00
# Copyright (C) 2001-2018, Python Software Foundation
2018-07-04 09:08:42 +00:00
# For licence information, see README file.
2016-10-30 09:46:26 +00:00
#
msgid ""
msgstr ""
2019-12-05 22:15:54 +00:00
"Project-Id-Version: Python 3\n"
2016-10-30 09:46:26 +00:00
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-15 22:33+0100\n"
"PO-Revision-Date: 2023-03-27 16:50+0200\n"
"Last-Translator: Mathieu Dupuy\n"
2018-07-04 09:14:25 +00:00
"Language-Team: FRENCH <traductions@lists.afpy.org>\n"
2017-05-23 22:40:56 +00:00
"Language: fr\n"
2016-10-30 09:46:26 +00:00
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.2.2\n"
2016-10-30 09:46:26 +00:00
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:5
2016-10-30 09:46:26 +00:00
msgid "Descriptor HowTo Guide"
msgstr "Guide pour l'utilisation des descripteurs"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:0
2017-12-01 06:48:13 +00:00
msgid "Author"
2018-01-21 22:53:31 +00:00
msgstr "Auteur"
2017-12-01 06:48:13 +00:00
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:7
2016-10-30 09:46:26 +00:00
msgid "Raymond Hettinger"
msgstr "Raymond Hettinger"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:0
2017-12-01 06:48:13 +00:00
msgid "Contact"
msgstr "Contact"
2016-10-30 09:46:26 +00:00
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:8
2017-12-01 06:48:13 +00:00
msgid "<python at rcn dot com>"
msgstr "<python at rcn dot com>"
2017-09-21 07:23:18 +00:00
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:11
2018-06-10 09:32:30 +00:00
msgid "Contents"
msgstr "Sommaire"
2018-06-10 09:32:30 +00:00
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:13
msgid ""
":term:`Descriptors <descriptor>` let objects customize attribute lookup, "
"storage, and deletion."
msgstr ""
"Les :term:`descripteurs <descriptor>` permettent de personnaliser la "
"recherche, le stockage et la suppression des attributs des objets."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:16
msgid "This guide has four major sections:"
msgstr "Ce guide comporte quatre parties principales :"
2020-12-18 06:09:57 +00:00
# suit un : , début d'énumération
2020-12-18 06:09:57 +00:00
#: 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 ""
"l'« introduction » donne un premier aperçu, en partant d'exemples simples, "
"puis en ajoutant une fonctionnalité à la fois. Commencez par là si vous "
"débutez avec les descripteurs ;"
2020-12-18 06:09:57 +00:00
# énumération
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:21
msgid ""
"The second section shows a complete, practical descriptor example. If you "
"already know the basics, start there."
msgstr ""
"la deuxième partie montre un exemple de descripteur complet et pratique. Si "
"vous connaissez déjà les bases, commencez par là ;"
2020-12-18 06:09:57 +00:00
# énumération
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:24
msgid ""
"The third section provides a more technical tutorial that goes into the "
"detailed mechanics of how descriptors work. Most people don't need this "
"level of detail."
msgstr ""
"la troisième partie fournit un didacticiel plus technique qui décrit de "
"manière détaillée comment fonctionnent les descripteurs. La plupart des gens "
"n'ont pas besoin de ce niveau de détail ;"
2020-12-18 06:09:57 +00:00
# fin d'énumération
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:28
msgid ""
"The last section has pure Python equivalents for built-in descriptors that "
"are written in C. Read this if you're curious about how functions turn into "
"bound methods or about the implementation of common tools like :func:"
"`classmethod`, :func:`staticmethod`, :func:`property`, and :term:`__slots__`."
msgstr ""
"la dernière partie contient des équivalents en pur Python des descripteurs "
"natifs écrits en C. Lisez ceci si vous êtes curieux de savoir comment les "
"fonctions se transforment en méthodes liées ou si vous voulez connaître "
"l'implémentation d'outils courants comme :func:`classmethod`, :func:"
"`staticmethod`, :func:`property` et :term:`__slots__`."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:36
msgid "Primer"
msgstr "Introduction"
2020-12-18 06:09:57 +00:00
#: 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 ""
"Dans cette introduction, nous commençons par l'exemple le plus simple "
"possible, puis nous ajoutons de nouvelles fonctionnalités une par une."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:43
msgid "Simple example: A descriptor that returns a constant"
msgstr "Un exemple simple : un descripteur qui renvoie une constante"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:45
msgid ""
"The :class:`Ten` class is a descriptor whose :meth:`__get__` method always "
"returns the constant ``10``:"
2020-12-18 06:09:57 +00:00
msgstr ""
"La classe :class:`Ten` est un descripteur dont la méthode :meth:`__get__` "
"renvoie toujours la constante ``10`` :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:54
msgid ""
"To use the descriptor, it must be stored as a class variable in another "
"class:"
msgstr ""
"Pour utiliser le descripteur, il doit être stocké en tant que variable de "
"classe dans une autre classe :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:62
msgid ""
"An interactive session shows the difference between normal attribute lookup "
"and descriptor lookup:"
msgstr ""
"Une session interactive montre la différence entre la recherche d'attribut "
"normale et la recherche *via* un descripteur :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:73
msgid ""
"In the ``a.x`` attribute lookup, the dot operator finds ``'x': 5`` in the "
"class dictionary. In the ``a.y`` lookup, the dot operator finds a "
"descriptor instance, recognized by its ``__get__`` method. Calling that "
"method returns ``10``."
2020-12-18 06:09:57 +00:00
msgstr ""
"Dans la recherche d'attribut ``a.x``, l'opérateur « point » trouve ``'x': "
"5`` dans le dictionnaire de classe. Dans la recherche ``a.y``, l'opérateur "
 point » trouve une instance de descripteur, reconnue par sa méthode "
"``__get__``. L'appel de cette méthode renvoie ``10``."
2020-12-18 06:09:57 +00:00
#: 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 ""
"Notez que la valeur ``10`` n'est stockée ni dans le dictionnaire de classe "
"ni dans le dictionnaire d'instance. Non, la valeur ``10`` est calculée à la "
"demande."
2020-12-18 06:09:57 +00:00
#: 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 ""
"Cet exemple montre comment fonctionne un descripteur simple, mais il n'est "
"pas très utile. Pour récupérer des constantes, une recherche d'attribut "
"normale est préférable."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:84
msgid ""
"In the next section, we'll create something more useful, a dynamic lookup."
msgstr ""
"Dans la section suivante, nous allons créer quelque chose de plus utile, une "
"recherche dynamique."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:88
msgid "Dynamic lookups"
msgstr "Recherches dynamiques"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:90
msgid ""
"Interesting descriptors typically run computations instead of returning "
"constants:"
msgstr ""
"Les descripteurs intéressants exécutent généralement des calculs au lieu de "
"renvoyer des constantes :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:109
msgid ""
"An interactive session shows that the lookup is dynamic — it computes "
"different, updated answers each time::"
msgstr ""
"Une session interactive montre que la recherche est dynamique — elle calcule "
"des réponses différentes, mises à jour à chaque fois ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:122
msgid ""
"Besides showing how descriptors can run computations, this example also "
"reveals the purpose of the parameters to :meth:`__get__`. The *self* "
"parameter is *size*, an instance of *DirectorySize*. The *obj* parameter is "
"either *g* or *s*, an instance of *Directory*. It is the *obj* parameter "
"that lets the :meth:`__get__` method learn the target directory. The "
"*objtype* parameter is the class *Directory*."
msgstr ""
"En plus de montrer comment les descripteurs peuvent exécuter des calculs, "
"cet exemple révèle également le but des paramètres de :meth:`__get__`. Le "
"paramètre *self* est *size*, une instance de *DirectorySize*. Le paramètre "
"*obj* est soit *g* soit *s*, une instance de *Directory*. C'est le paramètre "
"*obj* qui permet à la méthode :meth:`__get__` de connaître le répertoire "
"cible. Le paramètre *objtype* est la classe *Directory*."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:131
msgid "Managed attributes"
msgstr "Attributs gérés"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:133
msgid ""
"A popular use for descriptors is managing access to instance data. The "
"descriptor is assigned to a public attribute in the class dictionary while "
"the actual data is stored as a private attribute in the instance "
"dictionary. The descriptor's :meth:`__get__` and :meth:`__set__` methods "
"are triggered when the public attribute is accessed."
msgstr ""
"Une utilisation courante des descripteurs est la gestion de l'accès aux "
"données d'instances. Le descripteur est affecté à un attribut public dans le "
"dictionnaire de classe tandis que les données réelles sont stockées en tant "
"qu'attribut privé dans le dictionnaire d'instance. Les méthodes :meth:"
"`__get__` et :meth:`__set__` du descripteur sont déclenchées lors de l'accès "
"à l'attribut public."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:139
msgid ""
"In the following example, *age* is the public attribute and *_age* is the "
"private attribute. When the public attribute is accessed, the descriptor "
"logs the lookup or update:"
msgstr ""
"Dans l'exemple qui suit, *age* est l'attribut public et *_age* est "
"l'attribut privé. Lors de l'accès à l'attribut public, le descripteur "
"journalise la recherche ou la mise à jour :"
2020-12-18 06:09:57 +00:00
#: 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 ""
"Une session interactive montre que tous les accès à l'attribut géré *age* "
"sont consignés, mais que rien n'est journalisé pour l'attribut normal "
"*name* :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:206
msgid ""
"One major issue with this example is that the private name *_age* is "
"hardwired in the *LoggedAgeAccess* class. That means that each instance can "
"only have one logged attribute and that its name is unchangeable. In the "
"next example, we'll fix that problem."
msgstr ""
"Un problème majeur avec cet exemple est que le nom privé *_age* est écrit en "
"dur dans la classe *LoggedAgeAccess*. Cela signifie que chaque instance ne "
"peut avoir qu'un seul attribut journalisé et que son nom est immuable. Dans "
"l'exemple suivant, nous allons résoudre ce problème."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:213
msgid "Customized names"
msgstr "Noms personnalisés"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:215
msgid ""
"When a class uses descriptors, it can inform each descriptor about which "
"variable name was used."
msgstr ""
"Lorsqu'une classe utilise des descripteurs, elle peut informer chaque "
"descripteur du nom de variable utilisé."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:218
msgid ""
"In this example, the :class:`Person` class has two descriptor instances, "
"*name* and *age*. When the :class:`Person` class is defined, it makes a "
"callback to :meth:`__set_name__` in *LoggedAccess* so that the field names "
"can be recorded, giving each descriptor its own *public_name* and "
"*private_name*:"
msgstr ""
"Dans cet exemple, la classe :class:`Person` a deux instances de "
"descripteurs, *name* et *age*. Lorsque la classe :class:`Person` est "
"définie, :meth:`__set_name__` est appelée automatiquement dans "
"*LoggedAccess* afin que les noms de champs puissent être enregistrés, en "
"donnant à chaque descripteur ses propres *public_name* et *private_name* :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:256
msgid ""
"An interactive session shows that the :class:`Person` class has called :meth:"
"`__set_name__` so that the field names would be recorded. Here we call :"
"func:`vars` to look up the descriptor without triggering it:"
msgstr ""
"Une session interactive montre que la classe :class:`Person` a appelé :meth:"
"`__set_name__` pour que les noms des champs soient enregistrés. Ici, nous "
"appelons :func:`vars` pour rechercher le descripteur sans le déclencher :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:267
msgid "The new class now logs access to both *name* and *age*:"
msgstr ""
"La nouvelle classe enregistre désormais l'accès à la fois à *name* et *age* :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:284
msgid "The two *Person* instances contain only the private names:"
msgstr "Les deux instances de *Person* ne contiennent que les noms privés :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:295
2020-12-18 06:09:57 +00:00
msgid "Closing thoughts"
msgstr "Réflexions finales"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:297
2020-12-18 06:09:57 +00:00
msgid ""
"A :term:`descriptor` is what we call any object that defines :meth:"
"`__get__`, :meth:`__set__`, or :meth:`__delete__`."
msgstr ""
"Nous appelons :term:`descripteur <descriptor>` tout objet qui définit :meth:"
"`__get__`, :meth:`__set__` ou :meth:`__delete__`."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:300
2020-12-18 06:09:57 +00:00
msgid ""
"Optionally, descriptors can have a :meth:`__set_name__` method. This is "
"only used in cases where a descriptor needs to know either the class where "
"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 ""
"Facultativement, les descripteurs peuvent avoir une méthode :meth:"
"`__set_name__`. Elle n'est utile que dans les cas où un descripteur doit "
"connaître soit la classe dans laquelle il a été créé, soit le nom de la "
"variable de classe à laquelle il a été affecté (cette méthode, si elle est "
"présente, est appelée même si la classe n'est pas un descripteur)."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:305
2020-12-18 06:09:57 +00:00
msgid ""
"Descriptors get invoked by the dot operator during attribute lookup. If a "
"descriptor is accessed indirectly with ``vars(some_class)"
2020-12-18 06:09:57 +00:00
"[descriptor_name]``, the descriptor instance is returned without invoking it."
msgstr ""
"Les descripteurs sont invoqués par l'opérateur « point » lors de la "
"recherche d'attribut. Si on accède indirectement au descripteur avec "
"``vars(some_class)[descriptor_name]``, l'instance du descripteur est "
"renvoyée sans l'invoquer."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:309
2020-12-18 06:09:57 +00:00
msgid ""
"Descriptors only work when used as class variables. When put in instances, "
"they have no effect."
msgstr ""
"Les descripteurs ne fonctionnent que lorsqu'ils sont utilisés comme "
"variables de classe. Lorsqu'ils sont placés dans des instances, ils n'ont "
"aucun effet."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:312
2020-12-18 06:09:57 +00:00
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 principale raison d'être des descripteurs est de fournir un point "
"d'entrée permettant aux objets stockés dans des variables de classe de "
"contrôler ce qui se passe lors de la recherche d'attributs."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:315
2020-12-18 06:09:57 +00:00
msgid ""
"Traditionally, the calling class controls what happens during lookup. "
"Descriptors invert that relationship and allow the data being looked-up to "
"have a say in the matter."
msgstr ""
"Traditionnellement, la classe appelante contrôle ce qui se passe pendant la "
"recherche. Les descripteurs inversent cette relation et permettent aux "
"données recherchées d'avoir leur mot à dire."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:319
2020-12-18 06:09:57 +00:00
msgid ""
"Descriptors are used throughout the language. It is how functions turn into "
"bound methods. Common tools like :func:`classmethod`, :func:"
"`staticmethod`, :func:`property`, and :func:`functools.cached_property` are "
"all implemented as descriptors."
msgstr ""
"Les descripteurs sont utilisés partout dans le langage. C'est ainsi que les "
"fonctions se transforment en méthodes liées. Les outils courants tels que :"
"func:`classmethod`, :func:`staticmethod`, :func:`property` et :func:"
"`functools.cached_property` sont tous implémentés en tant que descripteurs."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:326
2020-12-18 06:09:57 +00:00
msgid "Complete Practical Example"
msgstr "Exemple complet pratique"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:328
2020-12-18 06:09:57 +00:00
msgid ""
"In this example, we create a practical and powerful tool for locating "
"notoriously hard to find data corruption bugs."
msgstr ""
"Dans cet exemple, nous créons un outil pratique et puissant pour localiser "
"les bogues de corruption de données notoirement difficiles à trouver."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:333
2020-12-18 06:09:57 +00:00
msgid "Validator class"
msgstr "Classe « validateur »"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:335
2020-12-18 06:09:57 +00:00
msgid ""
"A validator is a descriptor for managed attribute access. Prior to storing "
"any data, it verifies that the new value meets various type and range "
"restrictions. If those restrictions aren't met, it raises an exception to "
"prevent data corruption at its source."
msgstr ""
"Un validateur est un descripteur pour l'accès aux attributs gérés. Avant de "
"stocker des données, il vérifie que la nouvelle valeur respecte différentes "
"restrictions de type et de plage. Si ces restrictions ne sont pas "
"respectées, il lève une exception pour empêcher la corruption des données à "
"la source."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:340
2020-12-18 06:09:57 +00:00
msgid ""
"This :class:`Validator` class is both an :term:`abstract base class` and a "
"managed attribute descriptor:"
msgstr ""
"Cette classe :class:`Validator` est à la fois une :term:`classe mère "
"abstraite <abstract base class>` et un descripteur d'attributs gérés :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:363
2020-12-18 06:09:57 +00:00
msgid ""
"Custom validators need to inherit from :class:`Validator` and must supply a :"
"meth:`validate` method to test various restrictions as needed."
msgstr ""
"Les validateurs personnalisés doivent hériter de :class:`Validator` et "
"doivent fournir une méthode :meth:`validate` pour tester diverses "
"restrictions adaptées aux besoins."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:368
2020-12-18 06:09:57 +00:00
msgid "Custom validators"
msgstr "Validateurs personnalisés"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:370
2020-12-18 06:09:57 +00:00
msgid "Here are three practical data validation utilities:"
msgstr "Voici trois utilitaires concrets de validation de données :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:372
2020-12-18 06:09:57 +00:00
msgid ""
":class:`OneOf` verifies that a value is one of a restricted set of options."
msgstr ""
":class:`OneOf` vérifie qu'une valeur fait partie d'un ensemble limité de "
"valeurs ;"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:374
2020-12-18 06:09:57 +00:00
msgid ""
":class:`Number` verifies that a value is either an :class:`int` or :class:"
"`float`. Optionally, it verifies that a value is between a given minimum or "
"maximum."
msgstr ""
":class:`Number` vérifie qu'une valeur est soit un :class:`int` soit un :"
"class:`float`. Facultativement, il vérifie qu'une valeur se situe entre un "
"minimum ou un maximum donnés ;"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:378
2020-12-18 06:09:57 +00:00
msgid ""
":class:`String` verifies that a value is a :class:`str`. Optionally, it "
"validates a given minimum or maximum length. It can validate a user-defined "
"`predicate <https://en.wikipedia.org/wiki/Predicate_(mathematical_logic)>`_ "
"as well."
msgstr ""
":class:`String` vérifie qu'une valeur est une :class:`chaîne de caractères "
"<str>`. Éventuellement, il valide les longueurs minimale ou maximale "
"données. Il peut également valider un `prédicat <https://fr.wikipedia.org/"
"wiki/Pr%C3%A9dicat_(logique_math%C3%A9matique)>`_ défini par l'utilisateur."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:437
2020-12-18 06:09:57 +00:00
msgid "Practical application"
msgstr "Application pratique"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:439
2020-12-18 06:09:57 +00:00
msgid "Here's how the data validators can be used in a real class:"
msgstr ""
"Voici comment les validateurs de données peuvent être utilisés par une "
"classe réelle :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:454
2020-12-18 06:09:57 +00:00
msgid "The descriptors prevent invalid instances from being created:"
msgstr "Les descripteurs empêchent la création d'instances non valides :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:481
2020-12-18 06:09:57 +00:00
msgid "Technical Tutorial"
msgstr "Tutoriel technique"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:483
2020-12-18 06:09:57 +00:00
msgid ""
"What follows is a more technical tutorial for the mechanics and details of "
"how descriptors work."
msgstr ""
"Ce qui suit est un tutoriel plus technique relatif aux mécanismes et détails "
"de fonctionnement des descripteurs."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:488
2016-10-30 09:46:26 +00:00
msgid "Abstract"
msgstr "Résumé"
#: howto/descriptor.rst:490
2016-10-30 09:46:26 +00:00
msgid ""
"Defines descriptors, summarizes the protocol, and shows how descriptors are "
2020-12-18 06:09:57 +00:00
"called. Provides an example showing how object relational mappings work."
2016-10-30 09:46:26 +00:00
msgstr ""
"Ce tutoriel définit des descripteurs, résume le protocole et montre comment "
"les descripteurs sont appelés. Il fournit un exemple montrant comment "
"fonctionnent les correspondances relationnelles entre objets."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:493
2016-10-30 09:46:26 +00:00
msgid ""
"Learning about descriptors not only provides access to a larger toolset, it "
2020-12-18 06:09:57 +00:00
"creates a deeper understanding of how Python works."
2016-10-30 09:46:26 +00:00
msgstr ""
"L'apprentissage des descripteurs permet non seulement d'accéder à un "
"ensemble d'outils plus vaste, mais aussi de mieux comprendre le "
"fonctionnement de Python."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:498
2020-12-18 06:09:57 +00:00
msgid "Definition and introduction"
msgstr "Définition et introduction"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:500
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"In general, a descriptor is an attribute value that has one of the methods "
"in the descriptor protocol. Those methods are :meth:`__get__`, :meth:"
"`__set__`, and :meth:`__delete__`. If any of those methods are defined for "
"an attribute, it is said to be a :term:`descriptor`."
2016-10-30 09:46:26 +00:00
msgstr ""
"En général, un descripteur est la valeur d'un attribut qui possède une des "
"méthodes définies dans le « protocole descripteur ». Ces méthodes sont : :"
"meth:`__get__`, :meth:`__set__` et :meth:`__delete__`. Si l'une de ces "
"méthodes est définie pour un attribut, il s'agit d'un :term:`descripteur "
"<descriptor>`."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:505
2016-10-30 09:46:26 +00:00
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 "
"chain starting with ``a.__dict__['x']``, then ``type(a).__dict__['x']``, and "
2020-12-18 06:09:57 +00:00
"continuing through the method resolution order of ``type(a)``. If the looked-"
"up value is an object defining one of the descriptor methods, then Python "
"may override the default behavior and invoke the descriptor method instead. "
"Where this occurs in the precedence chain depends on which descriptor "
"methods were defined."
2016-10-30 09:46:26 +00:00
msgstr ""
"Le comportement par défaut pour l'accès aux attributs consiste à obtenir, "
"définir ou supprimer l'attribut dans le dictionnaire d'un objet. Par "
"exemple, pour chercher ``a.x`` Python commence par chercher ``a."
"__dict__['x']``, puis ``type(a).__dict__['x']``, et continue la recherche en "
"utilisant la MRO (l'ordre de résolution des méthodes) de ``type(a)``. Si la "
"valeur recherchée est un objet définissant l'une des méthodes de "
"descripteur, Python remplace le comportement par défaut par un appel à la "
"méthode du descripteur. Le moment où cela se produit dans la chaîne de "
"recherche dépend des méthodes définies par le descripteur."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:514
2016-10-30 09:46:26 +00:00
msgid ""
"Descriptors are a powerful, general purpose protocol. They are the "
"mechanism behind properties, methods, static methods, class methods, and :"
2020-12-18 06:09:57 +00:00
"func:`super()`. They are used throughout Python itself. Descriptors "
"simplify the underlying C code and offer a flexible set of new tools for "
"everyday Python programs."
2016-10-30 09:46:26 +00:00
msgstr ""
"Les descripteurs sont un protocole puissant et à usage général. Ils "
"constituent le mécanisme qui met en œuvre les propriétés, les méthodes, les "
"méthodes statiques, les méthodes de classes et :func:`super()`. Ils sont "
"utilisés dans tout Python lui-même. Les descripteurs simplifient le code C "
"sous-jacent et offrent un ensemble flexible de nouveaux outils pour les "
"programmes Python quotidiens."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:522
2020-12-18 06:09:57 +00:00
msgid "Descriptor protocol"
msgstr "Protocole descripteur"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:524
2018-09-15 20:37:31 +00:00
msgid "``descr.__get__(self, obj, type=None) -> value``"
msgstr "``descr.__get__(self, obj, type=None) -> valeur``"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:526
2018-09-15 20:37:31 +00:00
msgid "``descr.__set__(self, obj, value) -> None``"
msgstr "``descr.__set__(self, obj, valeur) -> None``"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:528
2018-09-15 20:37:31 +00:00
msgid "``descr.__delete__(self, obj) -> None``"
msgstr "``descr.__delete__(self, obj) -> None``"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:530
2016-10-30 09:46:26 +00:00
msgid ""
"That is all there is to it. Define any of these methods and an object is "
"considered a descriptor and can override default behavior upon being looked "
"up as an attribute."
msgstr ""
"C'est tout ce qu'il y a à faire. Définissez n'importe laquelle de ces "
"méthodes et un objet est considéré comme un descripteur ; il peut alors "
"remplacer le comportement par défaut lorsqu'il est recherché en tant "
"qu'attribut."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:534
2016-10-30 09:46:26 +00:00
msgid ""
2019-09-04 09:35:23 +00:00
"If an object defines :meth:`__set__` or :meth:`__delete__`, it is considered "
"a data descriptor. Descriptors that only define :meth:`__get__` are called "
2020-12-18 06:09:57 +00:00
"non-data descriptors (they are often used for methods but other uses are "
2019-09-04 09:35:23 +00:00
"possible)."
2016-10-30 09:46:26 +00:00
msgstr ""
2019-12-12 15:43:15 +00:00
"Si un objet définit :meth:`__set__` ou :meth:`__delete__`, il est considéré "
"comme un descripteur de données. Les descripteurs qui ne définissent que :"
"meth:`__get__` sont appelés descripteurs hors-données (ils sont généralement "
2019-12-12 15:43:15 +00:00
"utilisés pour des méthodes mais d'autres utilisations sont possibles)."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:539
2016-10-30 09:46:26 +00:00
msgid ""
"Data and non-data descriptors differ in how overrides are calculated with "
"respect to entries in an instance's dictionary. If an instance's dictionary "
"has an entry with the same name as a data descriptor, the data descriptor "
"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 ""
"Les descripteurs de données et les descripteurs hors-données diffèrent dans "
"la façon dont les changements de comportement sont calculés en ce qui "
"concerne les entrées du dictionnaire d'une instance. Si le dictionnaire "
"d'une instance comporte une entrée portant le même nom qu'un descripteur de "
"données, le descripteur de données est prioritaire. Si le dictionnaire d'une "
"instance comporte une entrée portant le même nom qu'un descripteur hors-"
"données, l'entrée du dictionnaire a la priorité."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:545
2016-10-30 09:46:26 +00:00
msgid ""
"To make a read-only data descriptor, define both :meth:`__get__` and :meth:"
"`__set__` with the :meth:`__set__` raising an :exc:`AttributeError` when "
"called. Defining the :meth:`__set__` method with an exception raising "
"placeholder is enough to make it a data descriptor."
msgstr ""
"Pour créer un descripteur de données en lecture seule, définissez à la fois :"
"meth:`__get__` et :meth:`__set__` avec :meth:`__set__` levant une erreur :"
"exc:`AttributeError` quand elle est appelée. Définir la méthode :meth:"
"`__set__` ne faisant que lever cette exception est suffisant pour en faire "
"un descripteur de données."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:552
2020-12-18 06:09:57 +00:00
msgid "Overview of descriptor invocation"
msgstr "Présentation de l'appel de descripteur"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:554
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"A descriptor can be called directly with ``desc.__get__(obj)`` or ``desc."
"__get__(None, cls)``."
2016-10-30 09:46:26 +00:00
msgstr ""
"Un descripteur peut être appelé directement par ``desc.__get__(obj)`` ou "
"``desc.__get__(None, cls)``."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:557
2020-12-18 06:09:57 +00:00
msgid ""
"But it is more common for a descriptor to be invoked automatically from "
"attribute access."
msgstr ""
"Mais il est plus courant qu'un descripteur soit invoqué automatiquement à "
"partir d'un accès à un attribut."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:560
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The expression ``obj.x`` looks up the attribute ``x`` in the chain of "
"namespaces for ``obj``. If the search finds a descriptor outside of the "
"instance ``__dict__``, its :meth:`__get__` method is invoked according to "
"the precedence rules listed below."
2016-10-30 09:46:26 +00:00
msgstr ""
"L'expression ``obj.x`` recherche l'attribut ``x`` dans les espaces de noms "
"pour ``obj``. Si la recherche trouve un descripteur en dehors de l'instance "
"``__dict__``, sa méthode :meth:`__get__` est appelée selon les règles de "
"priorité listées ci-dessous."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:565
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The details of invocation depend on whether ``obj`` is an object, class, or "
"instance of super."
2016-10-30 09:46:26 +00:00
msgstr ""
"Les détails de l'appel varient selon que ``obj`` est un objet, une classe ou "
"une instance de *super*."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:570
2020-12-18 06:09:57 +00:00
msgid "Invocation from an instance"
msgstr "Appel depuis une instance"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:572
2020-12-18 06:09:57 +00:00
msgid ""
"Instance lookup scans through a chain of namespaces giving data descriptors "
"the highest priority, followed by instance variables, then non-data "
"descriptors, then class variables, and lastly :meth:`__getattr__` if it is "
"provided."
msgstr ""
"La recherche d'instance consiste à parcourir la liste d'espaces de noms en "
"donnant aux descripteurs de données la priorité la plus élevée, suivis des "
"variables d'instance, puis des descripteurs hors-données, puis des variables "
"de classe, et enfin :meth:`__getattr__` s'il est fourni."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:577
2020-12-18 06:09:57 +00:00
msgid ""
"If a descriptor is found for ``a.x``, then it is invoked with: ``desc."
"__get__(a, type(a))``."
msgstr ""
"Si un descripteur est trouvé pour ``a.x``, alors il est appelé par ``desc."
"__get__(a, type(a))``."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:580
2020-12-18 06:09:57 +00:00
msgid ""
"The logic for a dotted lookup is in :meth:`object.__getattribute__`. Here "
"is a pure Python equivalent:"
msgstr ""
"La logique d'une recherche « après un point » se trouve dans :meth:`object."
"__getattribute__`. Voici un équivalent en Python pur :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:719
2020-12-18 06:09:57 +00:00
msgid ""
2022-03-23 17:40:12 +00:00
"Note, there is no :meth:`__getattr__` hook in the :meth:`__getattribute__` "
"code. That is why calling :meth:`__getattribute__` directly or with "
"``super().__getattribute__`` will bypass :meth:`__getattr__` entirely."
2020-12-18 06:09:57 +00:00
msgstr ""
"Notez qu'il n'y a pas d'appel vers :meth:`__getattr__` dans le code de :meth:"
"`__getattribute__`. C'est pourquoi appeler :meth:`__getattribute__` "
"directement ou avec ``super().__getattribute__`` contourne entièrement :meth:"
"`__getattr__`."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:723
2020-12-18 06:09:57 +00:00
msgid ""
2022-03-23 17:40:12 +00:00
"Instead, it is the dot operator and the :func:`getattr` function that are "
"responsible for invoking :meth:`__getattr__` whenever :meth:"
"`__getattribute__` raises an :exc:`AttributeError`. Their logic is "
"encapsulated in a helper function:"
2020-12-18 06:09:57 +00:00
msgstr ""
"Au lieu, c'est l'opérateur « point » et la fonction :func:`getattr` qui sont "
"responsables de l'appel de :meth:`__getattr__` chaque fois que :meth:"
"`__getattribute__` déclenche une :exc:`AttributeError`. Cette logique est "
"présentée encapsulée dans une fonction utilitaire :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:773
2020-12-18 06:09:57 +00:00
msgid "Invocation from a class"
msgstr "Appel depuis une classe"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:775
2020-12-18 06:09:57 +00:00
msgid ""
"The logic for a dotted lookup such as ``A.x`` is in :meth:`type."
"__getattribute__`. The steps are similar to those for :meth:`object."
"__getattribute__` but the instance dictionary lookup is replaced by a search "
"through the class's :term:`method resolution order`."
msgstr ""
"La logique pour une recherche « après un point » telle que ``A.x`` se trouve "
"dans :meth:`type.__getattribute__`. Les étapes sont similaires à celles de :"
"meth:`object.__getattribute__` mais la recherche dans le dictionnaire "
"d'instance est remplacée par une recherche suivant l':term:`ordre de "
"résolution des méthodes <method resolution order>` de la classe."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:780
2020-12-18 06:09:57 +00:00
msgid "If a descriptor is found, it is invoked with ``desc.__get__(None, A)``."
msgstr ""
"Si un descripteur est trouvé, il est appelé par ``desc.__get__(None, A)``."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:782
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The full C implementation can be found in :c:func:`type_getattro()` and :c:"
"func:`_PyType_Lookup()` in :source:`Objects/typeobject.c`."
msgstr ""
"L'implémentation C complète peut être trouvée dans :c:func:`type_getattro()` "
"et :c:func:`_PyType_Lookup()` dans :source:`Objects/typeobject.c`."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:787
2020-12-18 06:09:57 +00:00
msgid "Invocation from super"
msgstr "Appel depuis super"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:789
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The logic for super's dotted lookup is in the :meth:`__getattribute__` "
"method for object returned by :class:`super()`."
2016-10-30 09:46:26 +00:00
msgstr ""
"La logique de la recherche « après un point » de super se trouve dans la "
"méthode :meth:`__getattribute__` de l'objet renvoyé par :class:`super()`."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:792
2020-12-18 06:09:57 +00:00
msgid ""
"A dotted lookup such as ``super(A, obj).m`` searches ``obj.__class__."
"__mro__`` for the base class ``B`` immediately following ``A`` and then "
"returns ``B.__dict__['m'].__get__(obj, A)``. If not a descriptor, ``m`` is "
"returned unchanged."
msgstr ""
"La recherche d'attribut ``super(A, obj).m`` recherche dans ``obj.__class__."
"__mro__`` la classe ``B`` qui suit immédiatement A, et renvoie ``B."
"__dict__['m'].__get__(obj, A)``. Si ce n'est pas un descripteur, ``m`` est "
"renvoyé inchangé."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:797
2020-12-18 06:09:57 +00:00
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 <https://www.python.org/download/releases/2.2.3/descrintro/"
"#cooperation>`_."
msgstr ""
"L'implémentation C complète est dans :c:func:`super_getattro()` dans :source:"
"`Objects/typeobject.c`. Un équivalent Python pur peut être trouvé dans "
"`Guido's Tutorial <https://www.python.org/download/releases/2.2.3/descrintro/"
"#cooperation>`_ (page en anglais)."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:804
2020-12-18 06:09:57 +00:00
msgid "Summary of invocation logic"
msgstr "Résumé de la logique d'appel"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:806
2020-12-18 06:09:57 +00:00
msgid ""
"The mechanism for descriptors is embedded in the :meth:`__getattribute__()` "
"methods for :class:`object`, :class:`type`, and :func:`super`."
msgstr ""
"Le fonctionnement des descripteurs se trouve dans les méthodes :meth:"
"`__getattribute__()` de :class:`object`, :class:`type` et :func:`super`."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:809
2016-10-30 09:46:26 +00:00
msgid "The important points to remember are:"
msgstr "Les points importants à retenir sont :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:811
2020-12-18 06:09:57 +00:00
msgid "Descriptors are invoked by the :meth:`__getattribute__` method."
msgstr ""
"les descripteurs sont appelés par la méthode :meth:`__getattribute__` ;"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:813
2020-12-18 06:09:57 +00:00
msgid ""
"Classes inherit this machinery from :class:`object`, :class:`type`, or :func:"
"`super`."
msgstr ""
"les classes héritent ce mécanisme de :class:`object`, :class:`type` ou :func:"
"`super` ;"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:816
2020-12-18 06:09:57 +00:00
msgid ""
"Overriding :meth:`__getattribute__` prevents automatic descriptor calls "
"because all the descriptor logic is in that method."
2016-10-30 09:46:26 +00:00
msgstr ""
"redéfinir :meth:`__getattribute____` empêche les appels automatiques de "
"descripteur car toute la logique des descripteurs est dans cette méthode ;"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:819
2016-10-30 09:46:26 +00:00
msgid ""
":meth:`object.__getattribute__` and :meth:`type.__getattribute__` make "
2020-12-18 06:09:57 +00:00
"different calls to :meth:`__get__`. The first includes the instance and may "
"include the class. The second puts in ``None`` for the instance and always "
"includes the class."
2016-10-30 09:46:26 +00:00
msgstr ""
":meth:`objet.__getattribute__` et :meth:`type.__getattribute__` font "
"différents appels à :meth:`__get__`. La première inclut l'instance et peut "
"inclure la classe. La seconde met ``None`` pour l'instance et inclut "
"toujours la classe ;"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:824
2020-12-18 06:09:57 +00:00
msgid "Data descriptors always override instance dictionaries."
2016-10-30 09:46:26 +00:00
msgstr ""
"les descripteurs de données sont toujours prioritaires sur les dictionnaires "
"d'instances."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:826
2020-12-18 06:09:57 +00:00
msgid "Non-data descriptors may be overridden by instance dictionaries."
2016-10-30 09:46:26 +00:00
msgstr ""
"les descripteurs hors-données peuvent céder la priorité aux dictionnaires "
"d'instance."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:830
2020-12-18 06:09:57 +00:00
msgid "Automatic name notification"
msgstr "Notification automatique des noms"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:832
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"Sometimes it is desirable for a descriptor to know what class variable name "
"it was assigned to. When a new class is created, the :class:`type` "
"metaclass scans the dictionary of the new class. If any of the entries are "
"descriptors and if they define :meth:`__set_name__`, that method is called "
"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."
2016-10-30 09:46:26 +00:00
msgstr ""
"Il est parfois souhaitable qu'un descripteur sache à quel nom de variable de "
"classe il a été affecté. Lorsqu'une nouvelle classe est créée, la "
"métaclasse :class:`type` parcourt le dictionnaire de la nouvelle classe. Si "
"l'une des entrées est un descripteur et si elle définit :meth:"
"`__set_name__`, cette méthode est appelée avec deux arguments : *owner* "
"(propriétaire) est la classe où le descripteur est utilisé, et *name* est la "
"variable de classe à laquelle le descripteur a été assigné."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:839
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The implementation details are in :c:func:`type_new()` and :c:func:"
"`set_names()` in :source:`Objects/typeobject.c`."
2016-10-30 09:46:26 +00:00
msgstr ""
"Les détails d'implémentation sont dans :c:func:`type_new()` et :c:func:"
"`set_names()` dans :source:`Objects/typeobject.c`."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:842
2020-12-18 06:09:57 +00:00
msgid ""
"Since the update logic is in :meth:`type.__new__`, notifications only take "
"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 ""
"Comme la logique de mise à jour est dans :meth:`type.__new__`, les "
"notifications n'ont lieu qu'au moment de la création de la classe. Si des "
"descripteurs sont ajoutés à la classe par la suite, :meth:`__set_name__` "
"doit être appelée manuellement."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:848
2020-12-18 06:09:57 +00:00
msgid "ORM example"
msgstr "Exemple d'ORM"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:850
2016-10-30 09:46:26 +00:00
msgid ""
"The following code is a simplified skeleton showing how data descriptors "
"could be used to implement an `object relational mapping <https://en."
"wikipedia.org/wiki/Object%E2%80%93relational_mapping>`_."
2016-10-30 09:46:26 +00:00
msgstr ""
"Le code suivant est une ossature simplifiée montrant comment les "
"descripteurs de données peuvent être utilisés pour implémenter une "
"`correspondance objet-relationnel <https://fr.wikipedia.org/wiki/"
"Mapping_objet-relationnel>`_."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:854
2020-12-18 06:09:57 +00:00
msgid ""
"The essential idea is that the data is stored in an external database. The "
"Python instances only hold keys to the database's tables. Descriptors take "
"care of lookups or updates:"
msgstr ""
"L'idée essentielle est que les données sont stockées dans une base de "
"données externe. Les instances Python ne contiennent que les clés des tables "
"de la base de données. Les descripteurs s'occupent des recherches et des "
"mises à jour :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:873
2020-12-18 06:09:57 +00:00
msgid ""
"We can use the :class:`Field` class to define `models <https://en.wikipedia."
"org/wiki/Database_model>`_ that describe the schema for each table in a "
"database:"
msgstr ""
"Nous pouvons utiliser la classe :class:`Field` pour définir des `modèles "
"<https://en.wikipedia.org/wiki/Database_model>`_ qui décrivent le schéma de "
"chaque table d'une base de données :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:898
2020-12-18 06:09:57 +00:00
msgid "To use the models, first connect to the database::"
msgstr ""
"Pour utiliser les modèles, connectons-nous d'abord à la base de données ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:903
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"An interactive session shows how data is retrieved from the database and how "
"it can be updated:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Une session interactive montre comment les données sont extraites de la base "
"de données et comment elles peuvent être mises à jour :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:948
2020-12-18 06:09:57 +00:00
msgid "Pure Python Equivalents"
msgstr "Équivalents en Python pur"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:950
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The descriptor protocol is simple and offers exciting possibilities. "
"Several use cases are so common that they have been prepackaged into built-"
"in tools. Properties, bound methods, static methods, class methods, and "
"\\_\\_slots\\_\\_ are all based on the descriptor protocol."
2016-10-30 09:46:26 +00:00
msgstr ""
"Le protocole descripteur est simple et offre des possibilités très "
"intéressantes. Plusieurs cas d'utilisation sont si courants qu'ils ont été "
"regroupés dans des outils intégrés. Les propriétés, les méthodes liées, les "
"méthodes statiques et les méthodes de classe sont toutes basées sur le "
"protocole descripteur."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:957
2016-10-30 09:46:26 +00:00
msgid "Properties"
msgstr "Propriétés"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:959
2016-10-30 09:46:26 +00:00
msgid ""
"Calling :func:`property` is a succinct way of building a data descriptor "
2020-12-18 06:09:57 +00:00
"that triggers a function call upon access to an attribute. Its signature "
"is::"
2016-10-30 09:46:26 +00:00
msgstr ""
"Appeler :func:`property` construit de façon succincte un descripteur de "
"données qui déclenche un appel de fonction lors de l'accès à un attribut. Sa "
"signature est ::"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:964
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"The documentation shows a typical use to define a managed attribute ``x``:"
2016-10-30 09:46:26 +00:00
msgstr ""
"La documentation montre une utilisation caractéristique pour définir un "
"attribut géré ``x`` :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:988
2016-10-30 09:46:26 +00:00
msgid ""
"To see how :func:`property` is implemented in terms of the descriptor "
2020-12-18 06:09:57 +00:00
"protocol, here is a pure Python equivalent:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Pour voir comment :func:`property` est implémentée dans le protocole du "
"descripteur, voici un équivalent en Python pur :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1091
2016-10-30 09:46:26 +00:00
msgid ""
"The :func:`property` builtin helps whenever a user interface has granted "
"attribute access and then subsequent changes require the intervention of a "
"method."
msgstr ""
"La fonction native :func:`property` aide chaque fois qu'une interface "
"utilisateur a accordé l'accès à un attribut et que des modifications "
"ultérieures nécessitent l'intervention d'une méthode."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1095
2016-10-30 09:46:26 +00:00
msgid ""
"For instance, a spreadsheet class may grant access to a cell value through "
"``Cell('b10').value``. Subsequent improvements to the program require the "
"cell to be recalculated on every access; however, the programmer does not "
"want to affect existing client code accessing the attribute directly. The "
"solution is to wrap access to the value attribute in a property data "
2020-12-18 06:09:57 +00:00
"descriptor:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Par exemple, une classe de tableur peut donner accès à une valeur de cellule "
"via ``Cell('b10').value``. Les améliorations ultérieures du programme "
"exigent que la cellule soit recalculée à chaque accès ; cependant, le "
"programmeur ne veut pas impacter le code client existant accédant "
"directement à l'attribut. La solution consiste à envelopper l'accès à "
"l'attribut *value* dans un descripteur de données :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1112
2020-12-18 06:09:57 +00:00
msgid ""
"Either the built-in :func:`property` or our :func:`Property` equivalent "
"would work in this example."
msgstr ""
"Soit la :func:`property` native, soit notre équivalent :func:`Property` "
"fonctionnent dans cet exemple."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1117
2020-12-18 06:09:57 +00:00
msgid "Functions and methods"
msgstr "Fonctions et méthodes"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1119
2016-10-30 09:46:26 +00:00
msgid ""
"Python's object oriented features are built upon a function based "
"environment. Using non-data descriptors, the two are merged seamlessly."
msgstr ""
"Les fonctionnalités orientées objet de Python sont construites sur un "
"environnement basé sur des fonctions. À l'aide de descripteurs hors-données, "
"les deux sont fusionnés de façon transparente."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1122
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"Functions stored in class dictionaries get turned into methods when invoked. "
"Methods only differ from regular functions in that the object instance is "
"prepended to the other arguments. By convention, the instance is called "
"*self* but could be called *this* or any other variable name."
2016-10-30 09:46:26 +00:00
msgstr ""
"Les fonctions placées dans les dictionnaires des classes sont transformées "
"en méthodes au moment de l'appel. Les méthodes ne diffèrent des fonctions "
"ordinaires que par le fait que le premier argument est réservé à l'instance "
"de l'objet. Par convention Python, la référence de l'instance est appelée "
"*self*, bien qu'il soit possible de l'appeler *this* ou tout autre nom de "
"variable."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1127
2020-12-18 06:09:57 +00:00
msgid ""
"Methods can be created manually with :class:`types.MethodType` which is "
"roughly equivalent to:"
msgstr ""
"Les méthodes peuvent être créées manuellement avec :class:`types."
"MethodType`, qui équivaut à peu près à :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1144
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"To support automatic creation of methods, functions include the :meth:"
"`__get__` method for binding methods during attribute access. This means "
"that functions are non-data descriptors that return bound methods during "
"dotted lookup from an instance. Here's how it works:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Pour prendre en charge la création automatique des méthodes, les fonctions "
"incluent la méthode :meth:`__get__` pour lier les méthodes pendant l'accès "
"aux attributs. Cela signifie que toutes les fonctions sont des descripteurs "
"hors-données qui renvoient des méthodes liées au cours d'une recherche "
"d'attribut d'une instance. Cela fonctionne ainsi :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1160
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"Running the following class in the interpreter shows how the function "
"descriptor works in practice:"
2016-10-30 09:46:26 +00:00
msgstr ""
"L'exécution de la classe suivante dans l'interpréteur montre comment le "
"descripteur de fonction se comporte en pratique :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1169
2020-12-18 06:09:57 +00:00
msgid ""
"The function has a :term:`qualified name` attribute to support introspection:"
msgstr ""
"La fonction possède un attribut ``__qualname__`` (:term:`nom "
"qualifié<qualified name>`) pour prendre en charge l'introspection :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1176
2020-12-18 06:09:57 +00:00
msgid ""
"Accessing the function through the class dictionary does not invoke :meth:"
"`__get__`. Instead, it just returns the underlying function object::"
msgstr ""
"L'accès à la fonction *via* le dictionnaire de classe n'invoque pas :meth:"
"`__get__`. À la place, il renvoie simplement l'objet de fonction sous-"
"jacent ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1182
2020-12-18 06:09:57 +00:00
msgid ""
"Dotted access from a class calls :meth:`__get__` which just returns the "
"underlying function unchanged::"
msgstr ""
"La recherche d'attribut depuis une classe appelle :meth:`__get__`, qui "
"renvoie simplement la fonction sous-jacente inchangée ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1188
2020-12-18 06:09:57 +00:00
msgid ""
"The interesting behavior occurs during dotted access from an instance. The "
"dotted lookup calls :meth:`__get__` which returns a bound method object::"
msgstr ""
"Le comportement intéressant se produit lors d'une recherche d'attribut à "
"partir d'une instance. La recherche d'attribut appelle :meth:`__get__` qui "
"renvoie un objet « méthode liée » ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1195
2020-12-18 06:09:57 +00:00
msgid ""
"Internally, the bound method stores the underlying function and the bound "
"instance::"
msgstr ""
"En interne, la méthode liée stocke la fonction sous-jacente et l'instance "
"liée ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1204
2020-12-18 06:09:57 +00:00
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 vous vous êtes déjà demandé d'où vient *self* dans les méthodes "
"ordinaires ou d'où vient *cls* dans les méthodes de classe, c'est ça !"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1209
msgid "Kinds of methods"
msgstr "Types de méthodes"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1211
2016-10-30 09:46:26 +00:00
msgid ""
"Non-data descriptors provide a simple mechanism for variations on the usual "
"patterns of binding functions into methods."
msgstr ""
"Les descripteurs hors-données constituent un moyen simple pour modifier le "
"modèle usuel de transformation des fonctions en méthodes."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1214
2016-10-30 09:46:26 +00:00
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 "
2020-12-18 06:09:57 +00:00
"transforms an ``obj.f(*args)`` call into ``f(obj, *args)``. Calling ``cls."
2016-10-30 09:46:26 +00:00
"f(*args)`` becomes ``f(*args)``."
msgstr ""
"Pour résumer, les fonctions ont une méthode :meth:`__get__` pour qu'elles "
"puissent être converties en méthodes lorsqu'on y accède comme attributs. Le "
"descripteur hors-données transforme un appel ``obj.f(*args)`` en ``f(obj, "
"*args)``. L'appel ``cls.f(*args)`` devient ``f(*args)``."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1219
2016-10-30 09:46:26 +00:00
msgid "This chart summarizes the binding and its two most useful variants:"
msgstr ""
"Ce tableau résume le lien classique (*binding*) et ses deux variantes les "
"plus utiles :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1222
2016-10-30 09:46:26 +00:00
msgid "Transformation"
msgstr "Transformation"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1222
2020-12-18 06:09:57 +00:00
msgid "Called from an object"
msgstr "Appelée depuis un objet"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1222
2020-12-18 06:09:57 +00:00
msgid "Called from a class"
msgstr "Appelée depuis une classe"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1225
2016-10-30 09:46:26 +00:00
msgid "function"
msgstr "fonction"
#: howto/descriptor.rst:1225
2016-10-30 09:46:26 +00:00
msgid "f(obj, \\*args)"
msgstr "f(obj, \\*args)"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1227
2016-10-30 09:46:26 +00:00
msgid "f(\\*args)"
msgstr "f(\\*args)"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1227
2016-10-30 09:46:26 +00:00
msgid "staticmethod"
msgstr "méthode statique"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1229
2016-10-30 09:46:26 +00:00
msgid "classmethod"
msgstr "méthode de classe"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1229
2016-10-30 09:46:26 +00:00
msgid "f(type(obj), \\*args)"
msgstr "f(type(obj), \\*args)"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1229
2020-12-18 06:09:57 +00:00
msgid "f(cls, \\*args)"
msgstr "f(cls, \\*args)"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1234
msgid "Static methods"
msgstr "Méthodes statiques"
#: howto/descriptor.rst:1236
2016-10-30 09:46:26 +00:00
msgid ""
"Static methods return the underlying function without changes. Calling "
"either ``c.f`` or ``C.f`` is the equivalent of a direct lookup into ``object."
"__getattribute__(c, \"f\")`` or ``object.__getattribute__(C, \"f\")``. As a "
"result, the function becomes identically accessible from either an object or "
"a class."
msgstr ""
"Les méthodes statiques renvoient la fonction sous-jacente sans modification. "
"Appeler ``c.f`` ou ``C.f`` est l'équivalent d'une recherche directe dans "
"``objet.__getattribute__(c, \"f\")`` ou ``objet.__getattribute__(C, "
"\"f\")``. Par conséquent, l'accès à la fonction devient identique que ce "
"soit à partir d'un objet ou d'une classe."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1242
2016-10-30 09:46:26 +00:00
msgid ""
"Good candidates for static methods are methods that do not reference the "
"``self`` variable."
msgstr ""
2018-10-06 15:37:06 +00:00
"Les bonnes candidates pour être méthode statique sont des méthodes qui ne "
"font pas référence à la variable ``self``."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1245
2016-10-30 09:46:26 +00:00
msgid ""
"For instance, a statistics package may include a container class for "
"experimental data. The class provides normal methods for computing the "
"average, mean, median, and other descriptive statistics that depend on the "
"data. However, there may be useful functions which are conceptually related "
"but do not depend on the data. For instance, ``erf(x)`` is handy conversion "
"routine that comes up in statistical work but does not directly depend on a "
"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 ""
2018-10-06 15:37:06 +00:00
"Par exemple, un paquet traitant de statistiques peut inclure une classe qui "
"est un conteneur pour des données expérimentales. La classe fournit les "
"méthodes normales pour calculer la moyenne, la médiane et d'autres "
"statistiques descriptives qui dépendent des données. Cependant, il peut y "
"avoir des fonctions utiles qui sont conceptuellement liées mais qui ne "
"dépendent pas des données. Par exemple, la fonction d'erreur ``erf(x)`` est "
"souvent utile lorsqu'on travaille en statistique mais elle ne dépend pas "
"directement d'un ensemble de données particulier. Elle peut être appelée à "
"partir d'un objet ou de la classe : ``s.erf(1.5) --> .9332`` ou ``Sample."
"erf(1.5) --> .9332``."
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1254
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"Since static methods return the underlying function with no changes, the "
"example calls are unexciting:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Puisque les méthodes statiques renvoient la fonction sous-jacente sans "
"changement, les exemples dappels sont d'une grande banalité :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1271
2016-10-30 09:46:26 +00:00
msgid ""
"Using the non-data descriptor protocol, a pure Python version of :func:"
2020-12-18 06:09:57 +00:00
"`staticmethod` would look like this:"
2016-10-30 09:46:26 +00:00
msgstr ""
"En utilisant le protocole de descripteur hors-données, une version Python "
"pure de :func:`staticmethod` ressemblerait à ceci :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1310
2020-12-18 06:09:57 +00:00
msgid "Class methods"
msgstr "Méthodes de classe"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1312
2016-10-30 09:46:26 +00:00
msgid ""
"Unlike static methods, class methods prepend the class reference to the "
"argument list before calling the function. This format is the same for "
2020-12-18 06:09:57 +00:00
"whether the caller is an object or a class:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Contrairement aux méthodes statiques, les méthodes de classe ajoutent la "
"référence de classe en tête de la liste d'arguments, avant d'appeler la "
"fonction. C'est le même format que l'appelant soit un objet ou une classe :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1330
2016-10-30 09:46:26 +00:00
msgid ""
2020-12-18 06:09:57 +00:00
"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 "
"for class methods is to create alternate class constructors. For example, "
"the classmethod :func:`dict.fromkeys` creates a new dictionary from a list "
"of keys. The pure Python equivalent is:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Ce comportement est utile lorsque la fonction n'a besoin que d'une référence "
"de classe et ne se soucie pas des données propres à une instance "
"particulière. Une des utilisations des méthodes de classe est de créer des "
"constructeurs de classe personnalisés. Par exemple, la méthode de classe :"
"func:`dict.fromkeys` crée un nouveau dictionnaire à partir d'une liste de "
"clés. L'équivalent Python pur est :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1347
2020-12-18 06:09:57 +00:00
msgid "Now a new dictionary of unique keys can be constructed like this:"
2016-10-30 09:46:26 +00:00
msgstr ""
"Maintenant un nouveau dictionnaire de clés uniques peut être construit comme "
"ceci :"
2016-10-30 09:46:26 +00:00
#: howto/descriptor.rst:1357
2016-10-30 09:46:26 +00:00
msgid ""
"Using the non-data descriptor protocol, a pure Python version of :func:"
2020-12-18 06:09:57 +00:00
"`classmethod` would look like this:"
2016-10-30 09:46:26 +00:00
msgstr ""
"En utilisant le protocole de descripteur hors-données, une version Python "
"pure de :func:`classmethod` ressemblerait à ceci :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1408
2020-12-18 06:09:57 +00:00
msgid ""
"The code path for ``hasattr(type(self.f), '__get__')`` was added in Python "
"3.9 and makes it possible for :func:`classmethod` to support chained "
"decorators. For example, a classmethod and property could be chained "
2022-05-22 21:15:02 +00:00
"together. In Python 3.11, this functionality was deprecated."
2020-12-18 06:09:57 +00:00
msgstr ""
"La portion de code pour ``hasattr(type(self.f), '__get__')`` a été ajoutée "
"dans Python 3.9 et permet à :func:`classmethod` de prendre en charge les "
"décorateurs chaînés. Par exemple, un décorateur « méthode de classe » peut "
"être chaîné à un décorateur « propriété ». Dans Python 3.11, cette "
"fonctionnalité est devenue obsolète."
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1428
2020-12-18 06:09:57 +00:00
msgid "Member objects and __slots__"
msgstr "Objets membres et *__slots__*"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1430
2020-12-18 06:09:57 +00:00
msgid ""
"When a class defines ``__slots__``, it replaces instance dictionaries with a "
"fixed-length array of slot values. From a user point of view that has "
"several effects:"
msgstr ""
"Lorsqu'une classe définit ``__slots__``, Python remplace le dictionnaire "
"d'instance par un tableau de longueur fixe de créneaux prédéfinis. D'un "
"point de vue utilisateur, cela :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1434
2020-12-18 06:09:57 +00:00
msgid ""
"1. Provides immediate detection of bugs due to misspelled attribute "
"assignments. Only attribute names specified in ``__slots__`` are allowed:"
msgstr ""
"1/ permet une détection immédiate des bogues dus à des affectations "
"d'attributs mal orthographiés. Seuls les noms d'attribut spécifiés dans "
"``__slots__`` sont autorisés :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1450
2020-12-18 06:09:57 +00:00
msgid ""
"2. Helps create immutable objects where descriptors manage access to private "
"attributes stored in ``__slots__``:"
msgstr ""
"2/ aide à créer des objets immuables où les descripteurs gèrent l'accès aux "
"attributs privés stockés dans ``__slots__`` :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1485
2020-12-18 06:09:57 +00:00
msgid ""
"3. Saves memory. On a 64-bit Linux build, an instance with two attributes "
"takes 48 bytes with ``__slots__`` and 152 bytes without. This `flyweight "
"design pattern <https://en.wikipedia.org/wiki/Flyweight_pattern>`_ likely "
"only matters when a large number of instances are going to be created."
msgstr ""
"3/ économise de la mémoire. Sur une version Linux 64 bits, une instance avec "
"deux attributs prend 48 octets avec ``__slots__`` et 152 octets sans. Ce "
"patron de conception `poids mouche <https://fr.wikipedia.org/wiki/Poids-"
"mouche_(patron_de_conception)>`_ n'a probablement d'importance que si un "
"grand nombre d'instances doivent être créées ;"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1490
msgid ""
"4. Improves speed. Reading instance variables is 35% faster with "
"``__slots__`` (as measured with Python 3.10 on an Apple M1 processor)."
msgstr ""
"4/ améliore la vitesse. La lecture des variables d'instance est 35 % plus "
"rapide avec ``__slots__`` (mesure effectuée avec Python 3.10 sur un "
"processeur Apple M1) ;"
#: howto/descriptor.rst:1493
2020-12-18 06:09:57 +00:00
msgid ""
"5. Blocks tools like :func:`functools.cached_property` which require an "
2020-12-18 06:09:57 +00:00
"instance dictionary to function correctly:"
msgstr ""
"5/ bloque les outils comme :func:`functools.cached_property` qui nécessitent "
"un dictionnaire d'instance pour fonctionner correctement :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1515
2020-12-18 06:09:57 +00:00
msgid ""
"It is not possible to create an exact drop-in pure Python version of "
"``__slots__`` because it requires direct access to C structures and control "
"over object memory allocation. However, we can build a mostly faithful "
"simulation where the actual C structure for slots is emulated by a private "
"``_slotvalues`` list. Reads and writes to that private structure are "
"managed by member descriptors:"
msgstr ""
"Il n'est pas possible de créer une version Python pure exacte de "
"``__slots__`` car il faut un accès direct aux structures C et un contrôle "
"sur l'allocation de la mémoire des objets. Cependant, nous pouvons "
"construire une simulation presque fidèle où la structure C réelle pour les "
"*slots* est émulée par une liste privée ``_slotvalues``. Les lectures et "
"écritures dans cette structure privée sont gérées par des descripteurs de "
"membres :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1560
2020-12-18 06:09:57 +00:00
msgid ""
"The :meth:`type.__new__` method takes care of adding member objects to class "
"variables:"
msgstr ""
"La méthode :meth:`type.__new__` s'occupe d'ajouter des objets membres aux "
"variables de classe :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1576
2020-12-18 06:09:57 +00:00
msgid ""
"The :meth:`object.__new__` method takes care of creating instances that have "
"slots instead of an instance dictionary. Here is a rough simulation in pure "
"Python:"
msgstr ""
"La méthode :meth:`object.__new__` s'occupe de créer des instances qui ont "
"des *slots* au lieu d'un dictionnaire d'instances. Voici une simulation "
"approximative en Python pur :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1611
2020-12-18 06:09:57 +00:00
msgid ""
"To use the simulation in a real class, just inherit from :class:`Object` and "
"set the :term:`metaclass` to :class:`Type`:"
msgstr ""
"Pour utiliser la simulation dans une classe réelle, héritez simplement de :"
"class:`Object` et définissez la :term:`métaclasse <metaclass>` à :class:"
"`Type` :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1625
2020-12-18 06:09:57 +00:00
msgid ""
"At this point, the metaclass has loaded member objects for *x* and *y*::"
msgstr ""
"À ce stade, la métaclasse a chargé des objets membres pour *x* et *y* ::"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1646
2020-12-18 06:09:57 +00:00
msgid ""
"When instances are created, they have a ``slot_values`` list where the "
"attributes are stored:"
msgstr ""
"Lorsque les instances sont créées, elles ont une liste ``slot_values`` où "
"les attributs sont stockés :"
2020-12-18 06:09:57 +00:00
#: howto/descriptor.rst:1658
2020-12-18 06:09:57 +00:00
msgid "Misspelled or unassigned attributes will raise an exception:"
msgstr ""
"Les attributs mal orthographiés ou non attribués lèvent une exception :"
2020-12-18 06:09:57 +00:00
#~ msgid ""
#~ "Defines descriptors, summarizes the protocol, and shows how descriptors "
#~ "are called. Examines a custom descriptor and several built-in Python "
#~ "descriptors including functions, properties, static methods, and class "
#~ "methods. Shows how each works by giving a pure Python equivalent and a "
#~ "sample application."
#~ msgstr ""
#~ "Définit les descripteurs, résume le protocole et montre comment les "
#~ "descripteurs sont appelés. Examine un descripteur personnalisé et "
#~ "plusieurs descripteurs Python intégrés, y compris les fonctions, les "
#~ "propriétés, les méthodes statiques et les méthodes de classe. Montre "
#~ "comment chacun fonctionne en donnant un équivalent Python pur et un "
#~ "exemple d'application."
#~ msgid "Invoking Descriptors"
#~ msgstr "Invocation des descripteurs"
#~ msgid ""
#~ "Alternatively, it is more common for a descriptor to be invoked "
#~ "automatically upon attribute access. For example, ``obj.d`` looks up "
#~ "``d`` in the dictionary of ``obj``. If ``d`` defines the method :meth:"
#~ "`__get__`, then ``d.__get__(obj)`` is invoked according to the precedence "
#~ "rules listed below."
#~ msgstr ""
#~ "Alternativement, il est plus courant qu'un descripteur soit invoqué "
#~ "automatiquement lors de l'accès aux attributs. Par exemple, ``obj.d`` "
#~ "recherche ``d`` dans le dictionnaire de ``obj.d``. Si ``d`` définit la "
#~ "méthode :meth:`__get__`, alors ``d.__get__(obj)`` est invoqué selon les "
#~ "règles de priorité énumérées ci-dessous."
#~ msgid ""
#~ "For objects, the machinery is in :meth:`object.__getattribute__` which "
#~ "transforms ``b.x`` into ``type(b).__dict__['x'].__get__(b, type(b))``. "
#~ "The implementation works through a precedence chain that gives data "
#~ "descriptors priority over instance variables, instance variables priority "
#~ "over non-data descriptors, and assigns lowest priority to :meth:"
#~ "`__getattr__` if provided. The full C implementation can be found in :c:"
#~ "func:`PyObject_GenericGetAttr()` in :source:`Objects/object.c`."
#~ msgstr ""
#~ "Pour les objets, la machinerie est dans :meth:`object.__getattribute__` "
#~ "qui transforme ``b.x`` en ``type(b).__dict__['x'].__get__(b, type(b)]``. "
#~ "L'implémentation fonctionne à travers une chaîne de priorité qui donne la "
#~ "priorité aux descripteurs de données sur les variables d'instance, la "
#~ "priorité aux variables d'instance sur les descripteurs *non-data*, et "
#~ "attribue la priorité la plus faible à :meth:`__getattr__` si fourni. "
#~ "L'implémentation complète en C peut être trouvée dans :c:func:"
#~ "`PyObject_GenericGetAttr()` dans :source:`Objects/object.c`."
#~ msgid ""
#~ "For classes, the machinery is in :meth:`type.__getattribute__` which "
#~ "transforms ``B.x`` into ``B.__dict__['x'].__get__(None, B)``. In pure "
#~ "Python, it looks like::"
#~ msgstr ""
#~ "Pour les classes, la machinerie est dans :meth:`type.__getattribute__` "
#~ "qui transforme ``B.x`` en ``B.__dict__['x'].__get__(None, B)``. En "
#~ "Python pur, cela ressemble à ::"
#~ msgid ""
#~ "The details above show that the mechanism for descriptors is embedded in "
#~ "the :meth:`__getattribute__()` methods for :class:`object`, :class:"
#~ "`type`, and :func:`super`. Classes inherit this machinery when they "
#~ "derive from :class:`object` or if they have a meta-class providing "
#~ "similar functionality. Likewise, classes can turn-off descriptor "
#~ "invocation by overriding :meth:`__getattribute__()`."
#~ msgstr ""
#~ "Les détails ci-dessus montrent que le mécanisme des descripteurs est "
#~ "intégré dans les méthodes :meth:`__getattribute__()` pour :class:"
#~ "`object`, :class:`type` et :func:`super`. Les classes héritent de cette "
#~ "machinerie lorsqu'elles dérivent de :class:`object` ou si elles ont une "
#~ "méta-classe fournissant des fonctionnalités similaires. De même, les "
#~ "classes peuvent désactiver l'appel de descripteurs en remplaçant :meth:"
#~ "`__getattribute__()`."
#~ msgid "Descriptor Example"
#~ msgstr "Exemple de descripteur"
#~ msgid ""
#~ "The following code creates a class whose objects are data descriptors "
#~ "which print a message for each get or set. Overriding :meth:"
#~ "`__getattribute__` is alternate approach that could do this for every "
#~ "attribute. However, this descriptor is useful for monitoring just a few "
#~ "chosen attributes::"
#~ msgstr ""
#~ "Le code suivant crée une classe dont les objets sont des descripteurs de "
#~ "données qui affichent un message pour chaque lecture ou écriture. "
#~ "Redéfinir :meth:`__getattribute__` est une approche alternative qui "
#~ "pourrait le faire pour chaque attribut. Cependant, ce descripteur n'est "
#~ "utile que pour le suivi de quelques attributs choisis ::"
#~ msgid "Static Methods and Class Methods"
#~ msgstr "Méthodes statiques et méthodes de classe"