@@ -6,7 +6,7 @@ msgstr ""
6
6
"Project-Id-Version : Python 3\n "
7
7
"Report-Msgid-Bugs-To : \n "
8
8
"POT-Creation-Date : 2020-08-24 09:01+0200\n "
9
- "PO-Revision-Date : 2021-04-27 18:38 +0200\n "
9
+ "PO-Revision-Date : 2021-06-07 18:39 +0200\n "
10
10
"Last-Translator : Julien Palard <julien@palard.fr>\n "
11
11
"Language-Team : FRENCH <traductions@lists.afpy.org>\n "
12
12
"Language : fr\n "
@@ -27,9 +27,10 @@ msgid ""
27
27
"can get started. This document is a gentle introduction to the topic."
28
28
msgstr ""
29
29
"Python permet à l'auteur d'un module d'extension C de définir de nouveaux "
30
- "types qui peuvent être manipulés depuis du code Python, tel que les types "
31
- "natifs :class:`str` et :class:`list`. Un gabarit permet de coder ces types, "
32
- "mais quelques subtilités doivent être abordées avant de commencer."
30
+ "types qui peuvent être manipulés depuis du code Python, à la manière des "
31
+ "types natifs :class:`str` et :class:`list`. Les implémentations de tous les "
32
+ "types d'extension ont des similarités, mais quelques subtilités doivent être "
33
+ "abordées avant de commencer."
33
34
34
35
#: extending/newtypes_tutorial.rst:24
35
36
msgid "The Basics"
@@ -47,13 +48,14 @@ msgid ""
47
48
"functions are called \" type methods\" ."
48
49
msgstr ""
49
50
":term:`CPython` considère que tous les objets Python sont des variables de "
50
- "type :c:type:`PyObject\\\\ *`, qui sert de type de base pour tous les objets "
51
+ "type :c:type:`PyObject\\ *`, qui sert de type de base pour tous les objets "
51
52
"Python. La structure de :c:type:`PyObject` ne contient que le :term:"
52
- "`compteur de références <reference count>` et un pointeur vers un objet de type « type de "
53
- "l'objet ». C'est ici que tout se joue : l'objet type détermine quelle fonction "
54
- "(C) doit être appelée par l'interpréteur quand, par exemple, un attribut est "
55
- "recherché sur un objet, quand une méthode est appelée, ou quand l'objet est multiplié "
56
- "par un autre objet. Ces fonctions C sont appelées des « méthodes de type »."
53
+ "`compteur de références <reference count>` et un pointeur vers un objet de "
54
+ "type « type de l'objet ». C'est ici que tout se joue : l'objet type "
55
+ "détermine quelle fonction C doit être appelée par l'interpréteur quand, par "
56
+ "exemple, un attribut est recherché sur un objet, quand une méthode est "
57
+ "appelée, ou quand l'objet est multiplié par un autre objet. Ces fonctions C "
58
+ "sont appelées des « méthodes de type »."
57
59
58
60
#: extending/newtypes_tutorial.rst:35
59
61
msgid ""
@@ -80,7 +82,7 @@ msgid ""
80
82
"allows defining heap-allocated extension types using the :c:func:"
81
83
"`PyType_FromSpec` function, which isn't covered in this tutorial."
82
84
msgstr ""
83
- "Ce qui est montré ici, c' est la manière traditionnelle de définir des types "
85
+ "Ce qui est montré ici est la manière traditionnelle de définir des types "
84
86
"d'extension *statiques*, et cela convient dans la majorité des cas. L'API C "
85
87
"permet aussi de définir des types alloués sur le tas, via la fonction :c:"
86
88
"func:`PyType_FromSpec`, mais ce n'est pas couvert par ce tutoriel."
@@ -136,10 +138,10 @@ msgstr ""
136
138
"C'est ce qu'un objet ``Cusom`` contient. ``PyObject_HEAD`` est "
137
139
"obligatoirement au début de chaque structure d'objet et définit un champ "
138
140
"appelé ``ob_base`` de type :c:type:`PyObject`, contenant un pointeur vers un "
139
- "objet type et un compteur de références (on peut y accéder en "
140
- "utilisant les macros :c:macro:`Py_REFCNT` et :c:macro:`Py_TYPE`, "
141
- "respectivement). La raison d'être de ces macros est d'abstraire l'agencement "
142
- "de la structure, et ainsi de permettre l'ajout de champs en mode débogage."
141
+ "objet type et un compteur de références (on peut y accéder en utilisant les "
142
+ "macros :c:macro:`Py_REFCNT` et :c:macro:`Py_TYPE`, respectivement). La "
143
+ "raison d'être de ces macros est d'abstraire l'agencement de la structure, et "
144
+ "ainsi de permettre l'ajout de champs en mode débogage."
143
145
144
146
#: extending/newtypes_tutorial.rst:75
145
147
msgid ""
@@ -170,6 +172,10 @@ msgid ""
170
172
"listing all the :c:type:`PyTypeObject` fields that you don't care about and "
171
173
"also to avoid caring about the fields' declaration order."
172
174
msgstr ""
175
+ "Nous recommandons d'utiliser la syntaxe d'initialisation nommée (C99) pour "
176
+ "remplir la structure, comme ci-dessus, afin d'éviter d'avoir à nommer les "
177
+ "champs de :c:type:`PyTypeObject` dont vous n'avez pas besoin, et de ne pas "
178
+ "vous soucier de leur ordre."
173
179
174
180
#: extending/newtypes_tutorial.rst:104
175
181
msgid ""
@@ -178,22 +184,31 @@ msgid ""
178
184
"fields will be filled with zeros by the C compiler, and it's common practice "
179
185
"to not specify them explicitly unless you need them."
180
186
msgstr ""
187
+ "La définition de :c:type:`PyTypeObject` dans :file:`object.h` contient en "
188
+ "fait bien plus de :ref:`champs <type-structs>` que la définition ci-dessus. "
189
+ "Les champs restants sont mis à zéro par le compilateur C, et c'est une "
190
+ "pratique répandue de ne pas spécifier les champs dont vous n'avez pas besoin."
181
191
182
192
#: extending/newtypes_tutorial.rst:109
183
193
msgid "We're going to pick it apart, one field at a time::"
184
- msgstr ""
194
+ msgstr "Regardons les champs de cette structures, un par un :: "
185
195
186
196
#: extending/newtypes_tutorial.rst:113
187
197
msgid ""
188
198
"This line is mandatory boilerplate to initialize the ``ob_base`` field "
189
199
"mentioned above. ::"
190
200
msgstr ""
201
+ "Cette ligne, obligatoire, initialise le champ ``ob_base`` mentionné "
202
+ "précédemment."
191
203
192
204
#: extending/newtypes_tutorial.rst:118
193
205
msgid ""
194
206
"The name of our type. This will appear in the default textual "
195
207
"representation of our objects and in some error messages, for example:"
196
208
msgstr ""
209
+ "C'est le nom de notre type. Il apparaît dans la représentation textuelle par "
210
+ "défaut de nos objets, ainsi que dans quelques messages d'erreur, par "
211
+ "exemple :"
197
212
198
213
#: extending/newtypes_tutorial.rst:128
199
214
msgid ""
@@ -203,13 +218,22 @@ msgid ""
203
218
"`custom.Custom`. Using the real dotted import path is important to make your "
204
219
"type compatible with the :mod:`pydoc` and :mod:`pickle` modules. ::"
205
220
msgstr ""
221
+ "Notez que le nom comporte un point : il inclut le nom du module et le nom du "
222
+ "type. Dans ce cas le module est :mod:`custom`, et le type est :class:"
223
+ "`Custom`, donc nous donnons comme nom :class:`custom.Custom`. Nommer "
224
+ "correctement son type, avec le point, est important pour le rendre "
225
+ "compatible avec :mod:`pydoc` et :mod:`pickle`. ::"
206
226
207
227
#: extending/newtypes_tutorial.rst:137
208
228
msgid ""
209
229
"This is so that Python knows how much memory to allocate when creating new :"
210
230
"class:`Custom` instances. :c:member:`~PyTypeObject.tp_itemsize` is only "
211
231
"used for variable-sized objects and should otherwise be zero."
212
232
msgstr ""
233
+ "C'est pour que Python sache combien de mémoire allouer à la création d'une "
234
+ "nouvelle instance de :class:`Custom`. :c:member:`~PyTypeObject.tp_itemsize` "
235
+ "n'est utilisé que pour les objets de taille variable, sinon il doit rester à "
236
+ "zéro."
213
237
214
238
#: extending/newtypes_tutorial.rst:143
215
239
msgid ""
@@ -224,22 +248,40 @@ msgid ""
224
248
"type will be :class:`object`, or else you will be adding data members to "
225
249
"your base type, and therefore increasing its size."
226
250
msgstr ""
251
+ "Si vous voulez qu'une classe en Python puisse hériter de votre type, et que "
252
+ "votre type a le même :c:member:`~PyTypeObject.tp_basicsize` que son parent, "
253
+ "vous pourriez rencontrer des problèmes avec l'héritage multiple. Une sous-"
254
+ "classe Python de votre type devra lister votre type en premier dans son :"
255
+ "attr:`~class.__bases__`, sans quoi il ne sera pas capable d'appeler la "
256
+ "méthode :meth:`__new__` de votre type sans erreur. Vous pouvez éviter ce "
257
+ "problème en vous assurant que votre type a un :c:member:`~PyTypeObject."
258
+ "tp_basicsize` plus grand que son parent. La plupart du temps ce sera vrai "
259
+ "(soit son parent sera :class:`object`, soit vous ajouterez des attributs à "
260
+ "votre type, augmentant ainsi sa taille)."
227
261
228
262
#: extending/newtypes_tutorial.rst:153
229
263
msgid "We set the class flags to :const:`Py_TPFLAGS_DEFAULT`. ::"
230
264
msgstr ""
265
+ "On utilise la constante :const:`Py_TPFLAGS_DEFAULT` comme seule option de "
266
+ "type. ::"
231
267
232
268
#: extending/newtypes_tutorial.rst:157
233
269
msgid ""
234
270
"All types should include this constant in their flags. It enables all of "
235
271
"the members defined until at least Python 3.3. If you need further members, "
236
272
"you will need to OR the corresponding flags."
237
273
msgstr ""
274
+ "Chaque type devrait inclure cette constante dans ses options : elle active "
275
+ "tous les membres définis jusqu'à au moins Python 3.3. Si vous avez besoin de "
276
+ "plus de membres, vous pouvez la combiner à d'autres constantes avec un *ou* "
277
+ "binaire."
238
278
239
279
#: extending/newtypes_tutorial.rst:161
240
280
msgid ""
241
281
"We provide a doc string for the type in :c:member:`~PyTypeObject.tp_doc`. ::"
242
282
msgstr ""
283
+ "On fournit une *docstring* pour ce type via le membre :c:member:"
284
+ "`~PyTypeObject.tp_doc`. ::"
243
285
244
286
#: extending/newtypes_tutorial.rst:165
245
287
msgid ""
@@ -249,31 +291,45 @@ msgid ""
249
291
"use the default implementation provided by the API function :c:func:"
250
292
"`PyType_GenericNew`. ::"
251
293
msgstr ""
294
+ "Pour permettre la création d'une instance, nous devons fournir un *handler* :"
295
+ "c:member:`~PyTypeObject.tp_new`, qui est l'équivalent de la méthode Python :"
296
+ "meth:`__new__`, mais elle a besoin d'être spécifiée explicitement. Dans ce "
297
+ "cas, on se contente de l'implémentation par défaut fournie par la fonction :"
298
+ "c:func:`PyType_GenericNew` de l'API."
252
299
253
300
#: extending/newtypes_tutorial.rst:172
254
301
msgid ""
255
302
"Everything else in the file should be familiar, except for some code in :c:"
256
303
"func:`PyInit_custom`::"
257
304
msgstr ""
305
+ "Le reste du fichier doit vous être familier, en dehors du code de :c:func:"
306
+ "`PyInit_custom` ::"
258
307
259
308
#: extending/newtypes_tutorial.rst:178
260
309
msgid ""
261
310
"This initializes the :class:`Custom` type, filling in a number of members to "
262
311
"the appropriate default values, including :attr:`ob_type` that we initially "
263
312
"set to ``NULL``. ::"
264
313
msgstr ""
314
+ "Il initialise le type :class:`Custom`, en assignant quelques membres à leurs "
315
+ "valeurs par défaut, tel que :attr:`ob_type` qui valait initialement "
316
+ "``NULL``. ::"
265
317
266
318
#: extending/newtypes_tutorial.rst:189
267
319
msgid ""
268
320
"This adds the type to the module dictionary. This allows us to create :"
269
321
"class:`Custom` instances by calling the :class:`Custom` class:"
270
322
msgstr ""
323
+ "Ici on ajoute le type au dictionnaire du module. Cela permet de créer une "
324
+ "instance de :class:`Custom` en appelant la classe :class:`Custom` :"
271
325
272
326
#: extending/newtypes_tutorial.rst:197
273
327
msgid ""
274
328
"That's it! All that remains is to build it; put the above code in a file "
275
329
"called :file:`custom.c` and:"
276
330
msgstr ""
331
+ "C'est tout ! Il ne reste plus qu'à compiler, placez le code ci-dessus dans "
332
+ "un fichier :file:`custom.c` et :"
277
333
278
334
#: extending/newtypes_tutorial.rst:206
279
335
msgid "in a file called :file:`setup.py`; then typing"
0 commit comments