@@ -6,8 +6,8 @@ msgstr ""
6
6
"Project-Id-Version : Python 3\n "
7
7
"Report-Msgid-Bugs-To : \n "
8
8
"POT-Creation-Date : 2021-09-23 16:16+0200\n "
9
- "PO-Revision-Date : 2018-06-17 10:15 +0200\n "
10
- "Last-Translator : FULL NAME <EMAIL@ADDRESS >\n "
9
+ "PO-Revision-Date : 2021-09-25 11:25 +0200\n "
10
+ "Last-Translator : Julien Palard <julien@palard.fr >\n "
11
11
"Language-Team : FRENCH <traductions@lists.afpy.org>\n "
12
12
"Language : fr\n "
13
13
"MIME-Version : 1.0\n "
@@ -16,7 +16,7 @@ msgstr ""
16
16
17
17
#: extending/newtypes_tutorial.rst:7
18
18
msgid "Defining Extension Types: Tutorial"
19
- msgstr ""
19
+ msgstr "Tutoriel : définir des types dans des extensions "
20
20
21
21
#: extending/newtypes_tutorial.rst:14
22
22
msgid ""
@@ -26,10 +26,15 @@ msgid ""
26
26
"pattern, but there are some details that you need to understand before you "
27
27
"can get started. This document is a gentle introduction to the topic."
28
28
msgstr ""
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, à 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."
29
34
30
35
#: extending/newtypes_tutorial.rst:24
31
36
msgid "The Basics"
32
- msgstr ""
37
+ msgstr "Les bases "
33
38
34
39
#: extending/newtypes_tutorial.rst:26
35
40
msgid ""
@@ -42,19 +47,33 @@ msgid ""
42
47
"an object, a method called, or it is multiplied by another object. These C "
43
48
"functions are called \" type methods\" ."
44
49
msgstr ""
50
+ ":term:`CPython` considère que tous les objets Python sont des variables de "
51
+ "type :c:type:`PyObject\\ *`, qui sert de type de base pour tous les objets "
52
+ "Python. La structure de :c:type:`PyObject` ne contient que le :term:"
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 »."
45
59
46
60
#: extending/newtypes_tutorial.rst:35
47
61
msgid ""
48
62
"So, if you want to define a new extension type, you need to create a new "
49
63
"type object."
50
64
msgstr ""
65
+ "Donc, pour définir un nouveau type dans une extension, vous devez créer un "
66
+ "nouvel objet type."
51
67
52
68
#: extending/newtypes_tutorial.rst:38
53
69
msgid ""
54
70
"This sort of thing can only be explained by example, so here's a minimal, "
55
71
"but complete, module that defines a new type named :class:`Custom` inside a "
56
72
"C extension module :mod:`custom`:"
57
73
msgstr ""
74
+ "Ce genre de chose ne s'explique correctement qu'avec des exemples, voici "
75
+ "donc un module minimaliste mais suffisant qui définit un nouveau type nommé :"
76
+ "class:`Custom` dans le module d'extension :mod:`custom` : "
58
77
59
78
#: extending/newtypes_tutorial.rst:43
60
79
msgid ""
@@ -63,35 +82,49 @@ msgid ""
63
82
"allows defining heap-allocated extension types using the :c:func:"
64
83
"`PyType_FromSpec` function, which isn't covered in this tutorial."
65
84
msgstr ""
85
+ "Ce qui est montré ici est la manière traditionnelle de définir des types "
86
+ "d'extension *statiques*, et cela convient dans la majorité des cas. L'API C "
87
+ "permet aussi de définir des types alloués sur le tas, via la fonction :c:"
88
+ "func:`PyType_FromSpec`, mais ce n'est pas couvert par ce tutoriel."
66
89
67
90
#: extending/newtypes_tutorial.rst:50
68
91
msgid ""
69
92
"Now that's quite a bit to take in at once, but hopefully bits will seem "
70
93
"familiar from the previous chapter. This file defines three things:"
71
94
msgstr ""
95
+ "C'est un peu long, mais vous devez déjà reconnaître quelques morceaux "
96
+ "expliqués au chapitre précédent. Ce fichier définit trois choses :"
72
97
73
98
#: extending/newtypes_tutorial.rst:53
74
99
msgid ""
75
100
"What a :class:`Custom` **object** contains: this is the ``CustomObject`` "
76
101
"struct, which is allocated once for each :class:`Custom` instance."
77
102
msgstr ""
103
+ "Ce qu'un **objet** :class:`Custom` contient : c'est la structure "
104
+ "``CustomObject``, qui est allouée une fois pour chaque instance de :class:"
105
+ "`Custom`."
78
106
79
107
#: extending/newtypes_tutorial.rst:55
80
108
msgid ""
81
109
"How the :class:`Custom` **type** behaves: this is the ``CustomType`` struct, "
82
110
"which defines a set of flags and function pointers that the interpreter "
83
111
"inspects when specific operations are requested."
84
112
msgstr ""
113
+ "Comment le **type** :class:`Custom` se comporte : c'est la structure "
114
+ "``CustomType``, qui définit l'ensemble des options et pointeurs de fonction "
115
+ "utilisés par l'interpréteur."
85
116
86
117
#: extending/newtypes_tutorial.rst:58
87
118
msgid ""
88
119
"How to initialize the :mod:`custom` module: this is the ``PyInit_custom`` "
89
120
"function and the associated ``custommodule`` struct."
90
121
msgstr ""
122
+ "Comment initialiser le module :mod:`custom` : c'est la fonction "
123
+ "``PyInit_custom`` et la structure associée ``custommodule``."
91
124
92
125
#: extending/newtypes_tutorial.rst:61
93
126
msgid "The first bit is::"
94
- msgstr ""
127
+ msgstr "Commençons par :: "
95
128
96
129
#: extending/newtypes_tutorial.rst:67
97
130
msgid ""
@@ -103,30 +136,47 @@ msgid ""
103
136
"abstract away the layout and to enable additional fields in :ref:`debug "
104
137
"builds <debug-build>`."
105
138
msgstr ""
139
+ "C'est ce qu'un objet ``Custom`` contient. ``PyObject_HEAD`` est "
140
+ "obligatoirement au début de chaque structure d'objet et définit un champ "
141
+ "appelé ``ob_base`` de type :c:type:`PyObject`, contenant un pointeur vers un "
142
+ "objet type et un compteur de références (on peut y accéder en utilisant les "
143
+ "macros :c:macro:`Py_TYPE` et :c:macro:`Py_REFCNT`, respectivement). La "
144
+ "raison d'être de ces macros est d'abstraire l'agencement de la structure, et "
145
+ "ainsi de permettre l'ajout de champs en :ref:`mode débogage <debug-build>`."
106
146
107
147
#: extending/newtypes_tutorial.rst:76
108
148
msgid ""
109
149
"There is no semicolon above after the :c:macro:`PyObject_HEAD` macro. Be "
110
150
"wary of adding one by accident: some compilers will complain."
111
151
msgstr ""
152
+ "Il n'y a pas de point-virgule après la macro :c:macro:`PyObject_HEAD`. "
153
+ "Attention à ne pas l'ajouter par accident : certains compilateurs pourraient "
154
+ "s'en plaindre."
112
155
113
156
#: extending/newtypes_tutorial.rst:79
114
157
msgid ""
115
158
"Of course, objects generally store additional data besides the standard "
116
159
"``PyObject_HEAD`` boilerplate; for example, here is the definition for "
117
160
"standard Python floats::"
118
161
msgstr ""
162
+ "Bien sûr, les objets ajoutent généralement des données supplémentaires après "
163
+ "l'entête standard ``PyObject_HEAD``. Par exemple voici la définition du type "
164
+ "standard Python ``float`` ::"
119
165
120
166
#: extending/newtypes_tutorial.rst:88
121
167
msgid "The second bit is the definition of the type object. ::"
122
- msgstr ""
168
+ msgstr "La deuxième partie est la définition de l'objet type :: "
123
169
124
170
#: extending/newtypes_tutorial.rst:101
125
171
msgid ""
126
172
"We recommend using C99-style designated initializers as above, to avoid "
127
173
"listing all the :c:type:`PyTypeObject` fields that you don't care about and "
128
174
"also to avoid caring about the fields' declaration order."
129
175
msgstr ""
176
+ "Nous recommandons d'utiliser la syntaxe d'initialisation nommée (C99) pour "
177
+ "remplir la structure, comme ci-dessus, afin d'éviter d'avoir à lister les "
178
+ "champs de :c:type:`PyTypeObject` dont vous n'avez pas besoin, et de ne pas "
179
+ "vous soucier de leur ordre."
130
180
131
181
#: extending/newtypes_tutorial.rst:105
132
182
msgid ""
@@ -135,22 +185,31 @@ msgid ""
135
185
"fields will be filled with zeros by the C compiler, and it's common practice "
136
186
"to not specify them explicitly unless you need them."
137
187
msgstr ""
188
+ "La définition de :c:type:`PyTypeObject` dans :file:`object.h` contient en "
189
+ "fait bien plus de :ref:`champs <type-structs>` que la définition ci-dessus. "
190
+ "Les champs restants sont mis à zéro par le compilateur C, et c'est une "
191
+ "pratique répandue de ne pas spécifier les champs dont vous n'avez pas besoin."
138
192
139
193
#: extending/newtypes_tutorial.rst:110
140
194
msgid "We're going to pick it apart, one field at a time::"
141
- msgstr ""
195
+ msgstr "Regardons les champs de cette structure, un par un :: "
142
196
143
197
#: extending/newtypes_tutorial.rst:114
144
198
msgid ""
145
199
"This line is mandatory boilerplate to initialize the ``ob_base`` field "
146
200
"mentioned above. ::"
147
201
msgstr ""
202
+ "Cette ligne, obligatoire, initialise le champ ``ob_base`` mentionné "
203
+ "précédemment."
148
204
149
205
#: extending/newtypes_tutorial.rst:119
150
206
msgid ""
151
207
"The name of our type. This will appear in the default textual "
152
208
"representation of our objects and in some error messages, for example:"
153
209
msgstr ""
210
+ "C'est le nom de notre type. Il apparaît dans la représentation textuelle par "
211
+ "défaut de nos objets, ainsi que dans quelques messages d'erreur, par "
212
+ "exemple :"
154
213
155
214
#: extending/newtypes_tutorial.rst:129
156
215
msgid ""
@@ -160,13 +219,22 @@ msgid ""
160
219
"`custom.Custom`. Using the real dotted import path is important to make your "
161
220
"type compatible with the :mod:`pydoc` and :mod:`pickle` modules. ::"
162
221
msgstr ""
222
+ "Notez que le nom comporte un point : il inclut le nom du module et le nom du "
223
+ "type. Dans ce cas le module est :mod:`custom`, et le type est :class:"
224
+ "`Custom`, donc nous donnons comme nom :class:`custom.Custom`. Nommer "
225
+ "correctement son type, avec le point, est important pour le rendre "
226
+ "compatible avec :mod:`pydoc` et :mod:`pickle`. ::"
163
227
164
228
#: extending/newtypes_tutorial.rst:138
165
229
msgid ""
166
230
"This is so that Python knows how much memory to allocate when creating new :"
167
231
"class:`Custom` instances. :c:member:`~PyTypeObject.tp_itemsize` is only "
168
232
"used for variable-sized objects and should otherwise be zero."
169
233
msgstr ""
234
+ "C'est pour que Python sache combien de mémoire allouer à la création d'une "
235
+ "nouvelle instance de :class:`Custom`. :c:member:`~PyTypeObject.tp_itemsize` "
236
+ "n'est utilisé que pour les objets de taille variable, sinon il doit rester à "
237
+ "zéro."
170
238
171
239
#: extending/newtypes_tutorial.rst:144
172
240
msgid ""
@@ -181,22 +249,40 @@ msgid ""
181
249
"type will be :class:`object`, or else you will be adding data members to "
182
250
"your base type, and therefore increasing its size."
183
251
msgstr ""
252
+ "Si vous voulez qu'une classe en Python puisse hériter de votre type, et que "
253
+ "votre type a le même :c:member:`~PyTypeObject.tp_basicsize` que son parent, "
254
+ "vous rencontrerez des problèmes avec l'héritage multiple. Une sous-classe "
255
+ "Python de votre type devra lister votre type en premier dans son :attr:"
256
+ "`~class.__bases__`, sans quoi elle ne sera pas capable d'appeler la méthode :"
257
+ "meth:`__new__` de votre type sans erreur. Vous pouvez éviter ce problème en "
258
+ "vous assurant que votre type a un :c:member:`~PyTypeObject.tp_basicsize` "
259
+ "plus grand que son parent. La plupart du temps ce sera vrai (soit son parent "
260
+ "sera :class:`object`, soit vous ajouterez des attributs à votre type, "
261
+ "augmentant ainsi sa taille)."
184
262
185
263
#: extending/newtypes_tutorial.rst:154
186
264
msgid "We set the class flags to :const:`Py_TPFLAGS_DEFAULT`. ::"
187
265
msgstr ""
266
+ "On utilise la constante :const:`Py_TPFLAGS_DEFAULT` comme seule option de "
267
+ "type. ::"
188
268
189
269
#: extending/newtypes_tutorial.rst:158
190
270
msgid ""
191
271
"All types should include this constant in their flags. It enables all of "
192
272
"the members defined until at least Python 3.3. If you need further members, "
193
273
"you will need to OR the corresponding flags."
194
274
msgstr ""
275
+ "Chaque type doit inclure cette constante dans ses options : elle active tous "
276
+ "les membres définis jusqu'à au moins Python 3.3. Si vous avez besoin de plus "
277
+ "de membres, vous pouvez la combiner à d'autres constantes avec un *ou* "
278
+ "binaire."
195
279
196
280
#: extending/newtypes_tutorial.rst:162
197
281
msgid ""
198
282
"We provide a doc string for the type in :c:member:`~PyTypeObject.tp_doc`. ::"
199
283
msgstr ""
284
+ "On fournit une *docstring* pour ce type via le membre :c:member:"
285
+ "`~PyTypeObject.tp_doc`. ::"
200
286
201
287
#: extending/newtypes_tutorial.rst:166
202
288
msgid ""
@@ -206,31 +292,45 @@ msgid ""
206
292
"use the default implementation provided by the API function :c:func:"
207
293
"`PyType_GenericNew`. ::"
208
294
msgstr ""
295
+ "Pour permettre la création d'une instance, nous devons fournir un *handler* :"
296
+ "c:member:`~PyTypeObject.tp_new`, qui est l'équivalent de la méthode Python :"
297
+ "meth:`__new__`, mais elle a besoin d'être spécifiée explicitement. Dans ce "
298
+ "cas, on se contente de l'implémentation par défaut fournie par la fonction :"
299
+ "c:func:`PyType_GenericNew` de l'API."
209
300
210
301
#: extending/newtypes_tutorial.rst:173
211
302
msgid ""
212
303
"Everything else in the file should be familiar, except for some code in :c:"
213
304
"func:`PyInit_custom`::"
214
305
msgstr ""
306
+ "Le reste du fichier doit vous être familier, en dehors du code de :c:func:"
307
+ "`PyInit_custom` ::"
215
308
216
309
#: extending/newtypes_tutorial.rst:179
217
310
msgid ""
218
311
"This initializes the :class:`Custom` type, filling in a number of members to "
219
312
"the appropriate default values, including :attr:`ob_type` that we initially "
220
313
"set to ``NULL``. ::"
221
314
msgstr ""
315
+ "Il initialise le type :class:`Custom`, en assignant quelques membres à leurs "
316
+ "valeurs par défaut, tel que :attr:`ob_type` qui valait initialement "
317
+ "``NULL``. ::"
222
318
223
319
#: extending/newtypes_tutorial.rst:190
224
320
msgid ""
225
321
"This adds the type to the module dictionary. This allows us to create :"
226
322
"class:`Custom` instances by calling the :class:`Custom` class:"
227
323
msgstr ""
324
+ "Ici on ajoute le type au dictionnaire du module. Cela permet de créer une "
325
+ "instance de :class:`Custom` en appelant la classe :class:`Custom` :"
228
326
229
327
#: extending/newtypes_tutorial.rst:198
230
328
msgid ""
231
329
"That's it! All that remains is to build it; put the above code in a file "
232
330
"called :file:`custom.c` and:"
233
331
msgstr ""
332
+ "C'est tout ! Il ne reste plus qu'à compiler, placez le code ci-dessus dans "
333
+ "un fichier :file:`custom.c` et :"
234
334
235
335
#: extending/newtypes_tutorial.rst:207
236
336
msgid "in a file called :file:`setup.py`; then typing"
0 commit comments