diff --git a/_tools/pre_push_check.sh b/_tools/pre_push_check.sh old mode 100755 new mode 100644 index bc96f0a6..18e7b26c --- a/_tools/pre_push_check.sh +++ b/_tools/pre_push_check.sh @@ -87,15 +87,43 @@ if $RUN_QUICK; then # Die CI formatiert nach jedem Push automatisch mit powrap und # committet das Ergebnis. Wer lokal nicht formatiert, bekommt beim # naechsten Rebase Konflikte in genau diesen Zeilen. Deshalb hier. - vorher=$(git -C "$REPO_ROOT" diff --name-only -- '*.po' | wc -l | tr -d ' ') - powrap -m 2>/dev/null - nachher=$(git -C "$REPO_ROOT" diff --name-only -- '*.po' | wc -l | tr -d ' ') - if [[ "$vorher" != "$nachher" ]]; then - echo "powrap hat weitere Dateien umbrochen -- bitte mit committen." - else - echo "OK -- Umbruch war bereits sauber." - fi - pass=$((pass + 1)) + # + # '--check' schreibt nichts, sondern liefert nur den Status: + # 0 = nichts zu tun, 1 = wuerde umbrechen, + # 2 = Datei(en) nicht formatierbar, 127 = msgcat fehlt. + # Der frueher benutzte Vergleich der Anzahl geaenderter Dateien war + # blind: eine bereits geaenderte Datei bleibt in der Liste, egal ob + # powrap sie anfasst -- der Check meldete dann immer "sauber". + powrap --check -q -m -C "$REPO_ROOT" >/dev/null 2>&1 + powrap_status=$? + case $powrap_status in + 0) + echo "OK -- Umbruch ist sauber." + pass=$((pass + 1)) + ;; + 1) + echo "Umbruch nicht sauber -- powrap formatiert jetzt ..." + powrap -q -m -C "$REPO_ROOT" + echo "Diese Dateien bitte mit committen:" + git -C "$REPO_ROOT" diff --name-only -- '*.po' \ + | sed 's/^/ /' + pass=$((pass + 1)) + ;; + 2) + echo "FEHLER: powrap konnte Dateien nicht formatieren." + powrap -d -q -m -C "$REPO_ROOT" 2>&1 | sed 's/^/ /' + fail=$((fail + 1)) + ;; + 127) + echo "msgcat nicht gefunden -- gehoert zu gettext" + echo "(brew install gettext). Schritt uebersprungen." + skip=$((skip + 1)) + ;; + *) + echo "powrap endete mit unerwartetem Code $powrap_status." + fail=$((fail + 1)) + ;; + esac fi log_section "1b/5 msgfmt --check (Syntax)" @@ -214,6 +242,15 @@ if $RUN_FULL; then fi fi + # Immer frisch bauen, so wie die CI. 'make html' baut sonst + # inkrementell und haelt in seiner Umgebungsdatei unter Doc/build/ + # alte Werte fest -- zum Beispiel die Argumentnamen von + # audit-event-Direktiven, die upstream umbenannt wurden. Das sieht dann + # lokal wie ein Uebersetzungsfehler aus und ist keiner. + echo "Raeume Sphinx-Cache auf (make clean) ..." + (cd "$CPYTHON_SRC/Doc" && make clean) \ + || echo "Hinweis: 'make clean' fehlgeschlagen -- Build ist inkrementell." + LOCALE_DIR="$CPYTHON_SRC/Doc/locales/de/LC_MESSAGES" echo "Verknuepfe aktuellen Uebersetzungsstand ($BRANCH) nach $LOCALE_DIR ..." rm -rf "$LOCALE_DIR" diff --git a/builtins/exceptions.po b/builtins/exceptions.po index 004b3e5f..98bd10e5 100644 --- a/builtins/exceptions.po +++ b/builtins/exceptions.po @@ -661,15 +661,15 @@ msgstr "" "*winerror* ignoriert und das Attribut :attr:`winerror` existiert nicht." #: ../../builtins/exceptions.rst:397 -#, fuzzy msgid "" "The corresponding error message, as provided by the operating system. Under " "POSIX, it is obtained using the C functions :c:func:`!strerror` or :c:func:`!" "strerror_r`; under Windows, :c:func:`!FormatMessage` is used." msgstr "" "Die entsprechende Fehlermeldung, wie sie vom Betriebssystem bereitgestellt " -"wird. Sie wird unter POSIX durch die C-Funktion :c:func:`!perror` und unter " -"Windows durch :c:func:`!FormatMessage` formatiert." +"wird. Unter POSIX wird sie über die C-Funktionen :c:func:`!strerror` " +"oder :c:func:`!strerror_r` ermittelt, unter Windows über :c:func:`!" +"FormatMessage`." #: ../../builtins/exceptions.rst:404 msgid "" @@ -1847,7 +1847,6 @@ msgid "The class hierarchy for built-in exceptions is:" msgstr "Die Klassenhierarchie für integrierte Exceptions ist:" #: ../../builtins/exceptions.rst:1101 -#, fuzzy msgid "" "BaseException\n" " ├── BaseExceptionGroup\n" @@ -1935,7 +1934,7 @@ msgstr "" " ├── EOFError\n" " ├── ExceptionGroup [BaseExceptionGroup]\n" " ├── ImportError\n" -" │ └── ImportCycleError\n" +" │ ├── ImportCycleError\n" " │ └── ModuleNotFoundError\n" " ├── LookupError\n" " │ ├── IndexError\n" diff --git a/builtins/functions.po b/builtins/functions.po index a2a3758e..17dafaf6 100644 --- a/builtins/functions.po +++ b/builtins/functions.po @@ -872,7 +872,6 @@ msgstr "" "gelesen wurde (häufig wird ``''`` verwendet)." #: ../../builtins/functions.rst:312 -#, fuzzy msgid "" "The *mode* argument specifies what kind of code must be compiled; it can be " "``'exec'`` if *source* consists of a sequence of statements, ``'eval'`` if " @@ -888,7 +887,10 @@ msgstr "" "besteht, ``'eval'``, wenn es aus einem einzelnen Ausdruck besteht, oder " "``'single'``, wenn es aus einer einzelnen interaktiven Anweisung besteht (im " "letzteren Fall werden Ausdrucksanweisungen, die einen anderen Wert als " -"``None`` ergeben, ausgegeben)." +"``None`` ergeben, ausgegeben). Es kann außerdem ``'func_type'`` sein, wenn " +"*source* aus einer Typsignatur einer Funktion besteht, zum Beispiel ``(int) " +"-> str``. Weitere Informationen stehen unter :func:`ast.parse`. Dieser Modus " +"erfordert, dass :data:`ast.PyCF_ONLY_AST` in *flags* übergeben wird." #: ../../builtins/functions.rst:322 msgid "" @@ -1037,16 +1039,15 @@ msgstr "" #: ../../builtins/functions.rst:394 msgid "Added support for ``mode='func_type'``." -msgstr "" +msgstr "Unterstützung für ``mode='func_type'`` hinzugefügt." #: ../../builtins/functions.rst:397 -#, fuzzy msgid "" ":exc:`SyntaxError` is raised instead of :exc:`ValueError` when null bytes " "are encountered in *source*." msgstr "" -"Früher wurde ein :exc:`TypeError` ausgelöst, wenn in *source* Null-Bytes " -"auftraten." +"Bei Null-Bytes in *source* wird jetzt ein :exc:`SyntaxError` statt " +"eines :exc:`ValueError` ausgelöst." #: ../../builtins/functions.rst:401 msgid "Added the *module* parameter." @@ -1617,18 +1618,17 @@ msgstr "" "Builtins zugreifen." #: ../../builtins/functions.rst:734 -#, fuzzy msgid "" "The *closure* argument specifies a closure--a tuple of cellvars. It's only " "valid when *source* is a code object containing :term:`free (closure) " "variables `. The length of the tuple must exactly match " "the length of the code object's :attr:`~codeobject.co_freevars` attribute." msgstr "" -"Das Argument *closure* spezifiziert einen Closure – ein Tupel von Cell-" -"Variablen. Es ist nur dann gültig, wenn das *Objekt* ein Code-Objekt ist, " -"das :term:`freie (Closure-)Variablen ` enthält. Die Länge " -"des Tupels muss exakt der Länge des " -"Attributs :attr:`~codeobject.co_freevars` des Code-Objekts entsprechen." +"Das Argument *closure* gibt eine Closure an – ein Tupel von Cell-Variablen. " +"Es ist nur dann gültig, wenn *source* ein Code-Objekt ist, das :term:`freie " +"(Closure-)Variablen ` enthält. Die Länge des Tupels muss " +"exakt der Länge des Attributs :attr:`~codeobject.co_freevars` des Code-" +"Objekts entsprechen." #: ../../builtins/functions.rst:747 msgid "" @@ -3511,7 +3511,6 @@ msgstr "" "und :ref:`typesseq` dokumentiert." #: ../../builtins/functions.rst:1783 -#, fuzzy msgid "" "Return a string containing a printable representation of an object. For " "many types, this function makes an attempt to return a string that would " @@ -3530,8 +3529,7 @@ msgstr "" "zusätzliche Informationen – häufig einschließlich Name und Adresse des " "Objekts – enthält. Eine Klasse kann steuern, was diese Funktion für ihre " "Instanzen zurückgibt, indem sie eine :meth:`~object.__repr__`-Methode " -"definiert. Ist :func:`sys.displayhook` nicht verfügbar, löst diese Funktion " -"einen :exc:`RuntimeError` aus." +"definiert." #: ../../builtins/functions.rst:1792 msgid "This class has a custom representation that can be evaluated::" @@ -4166,7 +4164,6 @@ msgstr "" "type)`` wahr sein (dies ist nützlich für Klassenmethoden)." #: ../../builtins/functions.rst:2102 -#, fuzzy msgid "" "When called directly within an ordinary method of a class, both arguments " "may be omitted (\"zero-argument :func:`!super`\"). In this case, *type* will " @@ -4177,12 +4174,11 @@ msgid "" msgstr "" "Wenn der Aufruf direkt innerhalb einer gewöhnlichen Methode einer Klasse " "erfolgt, können beide Argumente weggelassen werden („:func:`!super` ohne " -"Argumente“). In diesem Fall ist *type* die umschließende Klasse und *obj* " -"das erste Argument der unmittelbar umschließenden Funktion (typischerweise " -"``self``). (Dies bedeutet, dass :func:`!super` ohne Argumente innerhalb " -"verschachtelter Funktionen – einschließlich Generator-Ausdrücken, die " -"implizit verschachtelte Funktionen erzeugen – nicht wie erwartet " -"funktioniert.)" +"Argumente“). In diesem Fall ist *type* die umschließende Klasse und " +"*object_or_type* das erste Argument der unmittelbar umschließenden Funktion " +"(typischerweise ``self``). :func:`!super` ohne Argumente funktioniert " +"innerhalb verschachtelter Funktionen nicht wie erwartet, auch nicht in " +"Generator-Ausdrücken, die implizit verschachtelte Funktionen erzeugen." #: ../../builtins/functions.rst:2109 msgid "" @@ -4698,7 +4694,6 @@ msgstr "" "bestimmen." #: ../../builtins/functions.rst:2365 -#, fuzzy msgid "" "*level* specifies whether to use absolute or relative imports. ``0`` (the " "default) means only perform absolute imports. For relative imports, ``1`` " @@ -4707,10 +4702,9 @@ msgid "" msgstr "" "*level* gibt an, ob absolute oder relative Importe verwendet werden sollen. " "``0`` (der Standard) bedeutet, dass nur absolute Importe durchgeführt " -"werden. Positive Werte für *level* geben die Anzahl der übergeordneten " -"Verzeichnisse an, die ausgehend vom Verzeichnis des Moduls, " -"das :func:`__import__` aufruft, durchsucht werden sollen (siehe :pep:`328` " -"für die Details)." +"werden. Bei relativen Importen bezeichnet ``1`` das aktuelle Paket, ``2`` " +"dessen übergeordnetes Paket und so weiter (Einzelheiten stehen " +"in :pep:`328`)." #: ../../builtins/functions.rst:2370 msgid "" diff --git a/builtins/stdtypes.po b/builtins/stdtypes.po index 755a3362..3b12f440 100644 --- a/builtins/stdtypes.po +++ b/builtins/stdtypes.po @@ -1719,9 +1719,8 @@ msgstr "" "mittels :func:`int`." #: ../../builtins/stdtypes.rst:899 -#, fuzzy msgid "Iteration-related types" -msgstr "Iterator-Typen" +msgstr "Typen rund um die Iteration" #: ../../builtins/stdtypes.rst:907 msgid "" @@ -1737,9 +1736,8 @@ msgstr "" "Iterationsmethoden immer." #: ../../builtins/stdtypes.rst:913 -#, fuzzy msgid "Iterables" -msgstr "Literale" +msgstr "Iterierbare Objekte" #: ../../builtins/stdtypes.rst:915 msgid "" @@ -1771,9 +1769,8 @@ msgstr "" "Objekte in der Python/C-API." #: ../../builtins/stdtypes.rst:934 -#, fuzzy msgid "Iterators" -msgstr "Iterator" +msgstr "Iteratoren" #: ../../builtins/stdtypes.rst:936 msgid "" @@ -1834,7 +1831,6 @@ msgstr "" "einhalten, gelten als fehlerhaft." #: ../../builtins/stdtypes.rst:968 -#, fuzzy msgid "Generator types" msgstr "Generator-Typen" @@ -1845,12 +1841,19 @@ msgid "" "and :term:`generator iterators ` -- provide a convenient " "way to implement the iterator protocol." msgstr "" +"Die :term:`Generatoren ` von Python -- genauer " +"gesagt :term:`Generatorfunktionen ` und :term:`Generator-" +"Iteratoren ` -- bieten einen bequemen Weg, das Iterator-" +"Protokoll umzusetzen." #: ../../builtins/stdtypes.rst:975 msgid "" "A function that contains one or more :ref:`yield expressions ` is " "a :term:`generator function`. For example::" msgstr "" +"Eine Funktion, die einen oder mehrere :ref:`yield-Ausdrücke ` " +"enthält, ist eine :term:`Generatorfunktion `. Zum " +"Beispiel::" #: ../../builtins/stdtypes.rst:979 msgid "" @@ -1860,6 +1863,11 @@ msgid "" "... yield 2\n" "... yield 3" msgstr "" +">>> def count_to_three():\n" +"... yield 0\n" +"... yield 1\n" +"... yield 2\n" +"... yield 3" #: ../../builtins/stdtypes.rst:985 msgid "" @@ -1868,18 +1876,27 @@ msgid "" "calling a generator function returns a :ref:`generator iterator `::" msgstr "" +"Generatorfunktionen verhalten sich wie gewöhnliche :ref:`selbst definierte " +"Funktionen ` (sie haben zum Beispiel dieselben " +"Attribute), nur dass der Aufruf einer Generatorfunktion " +"einen :ref:`Generator-Iterator ` zurückgibt::" #: ../../builtins/stdtypes.rst:990 msgid "" ">>> count_to_three()\n" "" msgstr "" +">>> count_to_three()\n" +"" #: ../../builtins/stdtypes.rst:993 msgid "" "Iterating a generator iterator executes code of the underlying generator " "function, producing each :keyword:`yield`\\ed value in turn::" msgstr "" +"Über einen Generator-Iterator zu iterieren führt den Code der zugrunde " +"liegenden Generatorfunktion aus und liefert nacheinander jeden " +"mit :keyword:`yield` übergebenen Wert::" #: ../../builtins/stdtypes.rst:996 msgid "" @@ -1893,12 +1910,24 @@ msgid "" ">>> list(count_to_three())\n" "[0, 1, 2, 3]" msgstr "" +">>> for number in count_to_three():\n" +"... print(number)\n" +"0\n" +"1\n" +"2\n" +"3\n" +"\n" +">>> list(count_to_three())\n" +"[0, 1, 2, 3]" #: ../../builtins/stdtypes.rst:1006 msgid "" "One common use for generator functions is implementing " "the :meth:`~object.__iter__` method of custom iterable objects. For example::" msgstr "" +"Generatorfunktionen werden häufig dafür verwendet, die " +"Methode :meth:`~object.__iter__` eigener iterierbarer Objekte umzusetzen. " +"Zum Beispiel::" #: ../../builtins/stdtypes.rst:1010 msgid "" @@ -1910,9 +1939,15 @@ msgid "" ">>> list(CardDeck())\n" "['three of clubs', 'ace of hearts']" msgstr "" +">>> class CardDeck:\n" +"... def __iter__(self):\n" +"... yield 'three of clubs'\n" +"... yield 'ace of hearts'\n" +"\n" +">>> list(CardDeck())\n" +"['three of clubs', 'ace of hearts']" #: ../../builtins/stdtypes.rst:1023 -#, fuzzy msgid "Generator iterators" msgstr "Generator-Typen" @@ -1922,6 +1957,9 @@ msgid "" "iterators>`. Iterating them drives execution of the underlying generator " "function." msgstr "" +"Generator-Iteratoren setzen das :ref:`Iterator-Protokoll ` um. Über sie zu iterieren treibt die Ausführung der zugrunde " +"liegenden Generatorfunktion voran." #: ../../builtins/stdtypes.rst:1033 msgid "" @@ -1936,24 +1974,43 @@ msgid "" "yielding another value, :meth:`~generator.__next__` raises " "a :exc:`StopIteration` exception, signalling that iteration has completed." msgstr "" +"Startet die Ausführung einer Generatorfunktion oder setzt sie an " +"dem :ref:`yield-Ausdruck ` fort, an dem die Funktion gerade " +"angehalten ist. Wird eine Generatorfunktion über eine " +"Methode :meth:`~generator.__next__` fortgesetzt, ergibt der aktuelle yield-" +"Ausdruck immer :const:`None`. Die Ausführung läuft dann bis zum nächsten " +"yield-Ausdruck weiter, wo der Generator erneut angehalten wird, und der Wert " +"des Ausdrucks nach dem Schlüsselwort :keyword:`yield` wird an den Aufrufer " +"von :meth:`~generator.__next__` zurückgegeben. Endet der Generator, ohne " +"einen weiteren Wert zu liefern, löst :meth:`~generator.__next__` " +"eine :exc:`StopIteration`-Ausnahme aus und zeigt damit an, dass die " +"Iteration abgeschlossen ist." #: ../../builtins/stdtypes.rst:1045 msgid "" "This method is normally called implicitly, for example by a :keyword:`for` " "loop, or by the built-in :func:`next` function." msgstr "" +"Diese Methode wird normalerweise stillschweigend aufgerufen, zum Beispiel " +"von einer :keyword:`for`-Schleife oder von der integrierten " +"Funktion :func:`next`." #: ../../builtins/stdtypes.rst:1048 msgid "" "Generator iterators have a few more methods than generic iterators, which " "can be used to control the execution of the underlying generator function:" msgstr "" +"Generator-Iteratoren haben einige Methoden mehr als allgemeine Iteratoren. " +"Damit lässt sich die Ausführung der zugrunde liegenden Generatorfunktion " +"steuern:" #: ../../builtins/stdtypes.rst:1053 msgid "" "\"Sends\" a value into the generator function: the *value* argument becomes " "the result of the current yield expression." msgstr "" +"„Sendet“ einen Wert in die Generatorfunktion: Das Argument *value* wird zum " +"Ergebnis des aktuellen yield-Ausdrucks." #: ../../builtins/stdtypes.rst:1056 msgid "" @@ -1961,6 +2018,9 @@ msgid "" "the underlying function and either returns the next yielded value or " "raises :exc:`StopIteration`." msgstr "" +"Ansonsten verhält sich diese Methode wie :meth:`~generator.__next__`: Sie " +"setzt die zugrunde liegende Funktion fort und gibt entweder den nächsten " +"gelieferten Wert zurück oder löst :exc:`StopIteration` aus." #: ../../builtins/stdtypes.rst:1060 msgid "" @@ -1968,11 +2028,16 @@ msgid "" "with :const:`None` as the argument, because there is no current yield " "expression that could receive the value." msgstr "" +"Wird :meth:`send` aufgerufen, um den Generator zu starten, muss es " +"mit :const:`None` als Argument aufgerufen werden, weil es noch keinen " +"aktuellen yield-Ausdruck gibt, der den Wert aufnehmen könnte." #: ../../builtins/stdtypes.rst:1068 msgid "" "Raises an exception at the point where the generator is currently suspended." msgstr "" +"Löst eine Ausnahme an der Stelle aus, an der der Generator gerade angehalten " +"ist." #: ../../builtins/stdtypes.rst:1070 msgid "" @@ -1982,6 +2047,11 @@ msgid "" "passed-in exception, or raises a different exception, then that exception " "propagates to the caller." msgstr "" +"Ansonsten verhält sich diese Methode wie :meth:`~generator.__next__`: Sie " +"setzt die zugrunde liegende Funktion fort und gibt entweder den nächsten " +"gelieferten Wert zurück oder löst :exc:`StopIteration` aus. Fängt die " +"Generatorfunktion die übergebene Ausnahme nicht ab oder löst sie eine andere " +"Ausnahme aus, wird diese an den Aufrufer weitergegeben." #: ../../builtins/stdtypes.rst:1076 msgid "" @@ -1990,12 +2060,19 @@ msgid "" "will raise :exc:`StopIteration`) and the thrown exception is propagated " "to :meth:`throw`'s caller." msgstr "" +"Wird :meth:`throw` aufgerufen, um den Generator zu starten, endet der " +"Generator sofort (nachfolgende Aufrufe von :meth:`~generator.__next__` lösen " +"also :exc:`StopIteration` aus), und die geworfene Ausnahme wird an den " +"Aufrufer von :meth:`throw` weitergegeben." #: ../../builtins/stdtypes.rst:1081 ../../builtins/stdtypes.rst:1202 msgid "" "In typical use, this is called with a single argument, an exception " "instance, similar to the way the :keyword:`raise` keyword is used." msgstr "" +"Üblicherweise wird sie mit einem einzigen Argument aufgerufen, einer " +"Ausnahmeinstanz -- ähnlich wie das Schlüsselwort :keyword:`raise` verwendet " +"wird." #: ../../builtins/stdtypes.rst:1084 msgid "" @@ -2007,12 +2084,22 @@ msgid "" "any existing :attr:`~BaseException.__traceback__` attribute stored in " "*value* may be cleared." msgstr "" +"Zur Abwärtskompatibilität wird allerdings auch die zweite Signatur " +"unterstützt, die einer Vereinbarung aus älteren Python-Versionen folgt. Das " +"Argument *type* sollte eine Ausnahmeklasse sein und *value* eine " +"Ausnahmeinstanz. Ist *value* nicht angegeben, wird der Konstruktor von " +"*type* aufgerufen, um eine Instanz zu bekommen. Ist *traceback* angegeben, " +"wird es an der Ausnahme gesetzt, andernfalls wird ein vorhandenes " +"Attribut :attr:`~BaseException.__traceback__` in *value* möglicherweise " +"gelöscht." #: ../../builtins/stdtypes.rst:1095 ../../builtins/stdtypes.rst:1212 msgid "" "The second signature \\(type\\[, value\\[, traceback\\]\\]\\) is deprecated " "and may be removed in a future version of Python." msgstr "" +"Die zweite Signatur \\(type\\[, value\\[, traceback\\]\\]\\) ist veraltet " +"und wird in einer künftigen Python-Version möglicherweise entfernt." #: ../../builtins/stdtypes.rst:1102 msgid "" @@ -2020,6 +2107,9 @@ msgid "" "function is currently suspended (equivalent to calling " "``throw(GeneratorExit)``)." msgstr "" +"Löst an der Stelle, an der die Generatorfunktion gerade angehalten ist, " +"eine :exc:`GeneratorExit`-Ausnahme aus (gleichbedeutend mit dem Aufruf " +"``throw(GeneratorExit)``)." #: ../../builtins/stdtypes.rst:1105 msgid "" @@ -2030,18 +2120,29 @@ msgid "" "exception, it is propagated to the caller. If a generator returns a value " "upon being closed, that value is returned by :meth:`close`." msgstr "" +"Ist die Generatorfunktion bereits beendet (durch eine Ausnahme oder eine " +"gewöhnliche Rückkehr) oder löst sie :exc:`GeneratorExit` aus (indem sie die " +"Ausnahme nicht abfängt), gibt :meth:`close` :const:`None` zurück. Liefert " +"der Generator einen Wert, wird ein :exc:`RuntimeError` ausgelöst. Löst der " +"Generator irgendeine andere Ausnahme aus, wird sie an den Aufrufer " +"weitergegeben. Gibt ein Generator beim Schließen einen Wert zurück, wird " +"dieser Wert von :meth:`close` zurückgegeben." #: ../../builtins/stdtypes.rst:1113 msgid "" "When a generator iterator is garbage collected before it has " "exited, :meth:`~generator.close` is called automatically." msgstr "" +"Wird ein Generator-Iterator von der Speicherbereinigung erfasst, bevor er " +"beendet ist, wird :meth:`~generator.close` automatisch aufgerufen." #: ../../builtins/stdtypes.rst:1118 msgid "" "If a generator returns a value upon being closed, the value is returned " "by :meth:`close`. Previously, it returned ``None``." msgstr "" +"Gibt ein Generator beim Schließen einen Wert zurück, wird dieser Wert " +"von :meth:`close` zurückgegeben. Vorher wurde ``None`` zurückgegeben." #: ../../builtins/stdtypes.rst:1123 msgid "" @@ -2050,10 +2151,14 @@ msgid "" "while one of these methods is already executing raises a :exc:`ValueError` " "exception." msgstr "" +"Eine der Generatormethoden " +"(:meth:`~generator.__next__`, :meth:`~generator.send`, :meth:`~generator.throw`, :meth:`~generator.close`) " +"aufzurufen, während eine dieser Methoden bereits läuft, löst " +"eine :exc:`ValueError`-Ausnahme aus." #: ../../builtins/stdtypes.rst:1133 msgid "Asynchronous generator iterators" -msgstr "" +msgstr "Asynchrone Generator-Iteratoren" #: ../../builtins/stdtypes.rst:1135 msgid "" @@ -2061,6 +2166,9 @@ msgid "" "which are used to control the execution of an asynchronous generator " "function." msgstr "" +"Dieser Unterabschnitt beschreibt die Methoden eines asynchronen Generator-" +"Iterators, mit denen die Ausführung einer asynchronen Generatorfunktion " +"gesteuert wird." #: ../../builtins/stdtypes.rst:1144 msgid "" @@ -2076,12 +2184,26 @@ msgid "" "awaitable instead raises a :exc:`StopAsyncIteration` exception, signalling " "that the asynchronous iteration has completed." msgstr "" +"Gibt ein :term:`abwartbares Objekt ` zurück, das bei seiner " +"Ausführung die asynchrone Generatorfunktion startet oder sie an " +"dem :ref:`yield-Ausdruck ` fortsetzt, an dem die Funktion gerade " +"angehalten ist. Wird eine asynchrone Generatorfunktion über eine " +"Methode :meth:`~agen.__anext__` fortgesetzt, ergibt der aktuelle yield-" +"Ausdruck im zurückgegebenen abwartbaren Objekt immer :const:`None`, und " +"dieses läuft bei seiner Ausführung bis zum nächsten yield-Ausdruck weiter. " +"Der Wert des Ausdrucks nach dem Schlüsselwort :keyword:`yield` ist der Wert " +"der :exc:`StopIteration`-Ausnahme, die die abschließende Coroutine auslöst. " +"Endet der asynchrone Generator, ohne einen weiteren Wert zu liefern, löst " +"das abwartbare Objekt stattdessen eine :exc:`StopAsyncIteration`-Ausnahme " +"aus und zeigt damit an, dass die asynchrone Iteration abgeschlossen ist." #: ../../builtins/stdtypes.rst:1157 msgid "" "This method is normally called implicitly by an :keyword:`async for` loop, " "or by the built-in :func:`anext` function." msgstr "" +"Diese Methode wird normalerweise stillschweigend von einer :keyword:`async " +"for`-Schleife oder von der integrierten Funktion :func:`anext` aufgerufen." #: ../../builtins/stdtypes.rst:1161 msgid "" @@ -2089,6 +2211,9 @@ msgid "" "asynchronous iterators, which can be used to control the execution of the " "underlying generator function:" msgstr "" +"Asynchrone Generator-Iteratoren haben einige Methoden mehr als allgemeine " +"asynchrone Iteratoren. Damit lässt sich die Ausführung der zugrunde " +"liegenden Generatorfunktion steuern:" #: ../../builtins/stdtypes.rst:1168 msgid "" @@ -2096,6 +2221,9 @@ msgid "" "asynchronous generator function: the *value* argument becomes the result of " "the current yield expression." msgstr "" +"Gibt ein abwartbares Objekt zurück, das bei seiner Ausführung einen Wert in " +"die zugrunde liegende asynchrone Generatorfunktion „sendet“: Das Argument " +"*value* wird zum Ergebnis des aktuellen yield-Ausdrucks." #: ../../builtins/stdtypes.rst:1172 msgid "" @@ -2104,6 +2232,11 @@ msgid "" "returns the next yielded value as the value of the " "raised :exc:`StopIteration`, or raises :exc:`StopAsyncIteration`." msgstr "" +"Ansonsten verhält sich diese Methode wie :meth:`~agen.__anext__`: Läuft das " +"zurückgegebene abwartbare Objekt, setzt es die zugrunde liegende Funktion " +"fort und gibt entweder den nächsten gelieferten Wert als Wert der " +"ausgelösten :exc:`StopIteration` zurück oder löst :exc:`StopAsyncIteration` " +"aus." #: ../../builtins/stdtypes.rst:1177 msgid "" @@ -2111,12 +2244,18 @@ msgid "" "called with :const:`None` as the argument, because there is no yield " "expression that could receive the value." msgstr "" +"Wird :meth:`asend` aufgerufen, um den asynchronen Generator zu starten, muss " +"es mit :const:`None` als Argument aufgerufen werden, weil es keinen yield-" +"Ausdruck gibt, der den Wert aufnehmen könnte." #: ../../builtins/stdtypes.rst:1186 msgid "" "Returns an awaitable that, when run, raises an exception at the point where " "the underlying asynchronous generator function is currently suspended." msgstr "" +"Gibt ein abwartbares Objekt zurück, das bei seiner Ausführung an der Stelle " +"eine Ausnahme auslöst, an der die zugrunde liegende asynchrone " +"Generatorfunktion gerade angehalten ist." #: ../../builtins/stdtypes.rst:1189 msgid "" @@ -2128,6 +2267,14 @@ msgid "" "different exception, then when the awaitable is run, that exception " "propagates to the caller of the awaitable." msgstr "" +"Ansonsten verhält sich diese Methode wie :meth:`~agen.__anext__`: Läuft das " +"zurückgegebene abwartbare Objekt, setzt es die zugrunde liegende Funktion " +"fort (mit einer ausgelösten Ausnahme) und gibt entweder den nächsten " +"gelieferten Wert als Wert der ausgelösten :exc:`StopIteration` zurück oder " +"löst :exc:`StopAsyncIteration` aus. Fängt die zugrunde liegende Funktion die " +"übergebene Ausnahme nicht ab oder löst sie eine andere Ausnahme aus, wird " +"diese bei der Ausführung des abwartbaren Objekts an dessen Aufrufer " +"weitergegeben." #: ../../builtins/stdtypes.rst:1197 msgid "" @@ -2136,6 +2283,11 @@ msgid "" "from :meth:`~agen.__anext__` will raise :exc:`StopAsyncIteration` when run) " "and the thrown exception is propagated to the awaitable's caller." msgstr "" +"Wird :meth:`~agen.athrow` aufgerufen, um den Generator zu starten, endet der " +"Generator, sobald das abwartbare Objekt läuft (nachfolgende Ergebnisse " +"von :meth:`~agen.__anext__` lösen bei ihrer Ausführung " +"also :exc:`StopAsyncIteration` aus), und die geworfene Ausnahme wird an den " +"Aufrufer des abwartbaren Objekts weitergegeben." #: ../../builtins/stdtypes.rst:1205 msgid "" @@ -2143,6 +2295,9 @@ msgid "" "exception instance is created from three arguments in the same way as " "in :meth:`generator.throw`." msgstr "" +"Zur Abwärtskompatibilität wird allerdings auch die zweite Signatur " +"unterstützt. Aus drei Argumenten wird dabei eine Ausnahmeinstanz erzeugt, " +"genauso wie bei :meth:`generator.throw`." #: ../../builtins/stdtypes.rst:1221 msgid "" @@ -2150,6 +2305,10 @@ msgid "" "the underlying asynchronous generator function at the point where it is " "currently suspended (equivalent to calling ``athrow(GeneratorExit)``)." msgstr "" +"Gibt ein abwartbares Objekt zurück, das bei seiner Ausführung an der Stelle, " +"an der die zugrunde liegende asynchrone Generatorfunktion gerade angehalten " +"ist, ein :exc:`GeneratorExit` hineinwirft (gleichbedeutend mit dem Aufruf " +"``athrow(GeneratorExit)``)." #: ../../builtins/stdtypes.rst:1225 msgid "" @@ -2159,6 +2318,12 @@ msgid "" "further awaitables returned by subsequent calls to the asynchronous " "generator will raise a :exc:`StopAsyncIteration` exception." msgstr "" +"Endet die asynchrone Generatorfunktion daraufhin ordnungsgemäß, ist sie " +"bereits geschlossen oder löst sie :exc:`GeneratorExit` aus (indem sie die " +"Ausnahme nicht abfängt), löst das zurückgegebene abwartbare Objekt " +"eine :exc:`StopIteration`-Ausnahme aus. Alle weiteren abwartbaren Objekte, " +"die nachfolgende Aufrufe des asynchronen Generators zurückgeben, lösen " +"eine :exc:`StopAsyncIteration`-Ausnahme aus." #: ../../builtins/stdtypes.rst:1231 msgid "" @@ -2166,6 +2331,10 @@ msgid "" "raised by the awaitable. If the asynchronous generator raises any other " "exception, that exception is propagated to the caller of the awaitable." msgstr "" +"Liefert der asynchrone Generator einen Wert, löst das abwartbare Objekt " +"einen :exc:`RuntimeError` aus. Löst der asynchrone Generator irgendeine " +"andere Ausnahme aus, wird diese an den Aufrufer des abwartbaren Objekts " +"weitergegeben." #: ../../builtins/stdtypes.rst:1236 msgid "" @@ -2173,6 +2342,9 @@ msgid "" "normal exit, then further calls to :meth:`aclose` will return an awaitable " "that does nothing." msgstr "" +"Ist der asynchrone Generator bereits durch eine Ausnahme oder auf " +"gewöhnlichem Weg beendet, geben weitere Aufrufe von :meth:`aclose` ein " +"abwartbares Objekt zurück, das nichts tut." #: ../../builtins/stdtypes.rst:1244 msgid "Sequence Types --- :class:`list`, :class:`tuple`, :class:`range`" @@ -7049,13 +7221,12 @@ msgstr "" "von *size* abgeschnitten." #: ../../builtins/stdtypes.rst:3783 -#, fuzzy msgid "" "If the :class:`bytearray` needs to grow, all new bytes will be set to null " "bytes." msgstr "" "Wenn das :class:`bytearray` vergrößert werden muss, werden alle neuen Bytes " -"jenseits von *size* auf Nullbytes gesetzt." +"auf Nullbytes gesetzt." #: ../../builtins/stdtypes.rst:3787 msgid "This is equivalent to:" @@ -9765,7 +9936,6 @@ msgstr "" "akzeptieren." #: ../../builtins/stdtypes.rst:5595 -#, fuzzy msgid "" "Note, the *elem* argument to " "the :meth:`~object.__contains__`, :meth:`~set.remove`, " @@ -9774,9 +9944,8 @@ msgid "" msgstr "" "Beachte, dass das Argument *elem* für die " "Methoden :meth:`~object.__contains__`, :meth:`~set.remove` " -"und :meth:`~set.discard` eine Menge sein kann. Um die Suche nach einem " -"äquivalenten Frozenset zu unterstützen, wird aus *elem* vorübergehend ein " -"solches erstellt." +"und :meth:`~set.discard` eine Menge sein kann. In diesem Fall wird nach " +"einem äquivalenten Frozenset gesucht." #: ../../builtins/stdtypes.rst:5599 msgid "" @@ -9854,11 +10023,9 @@ msgstr "" "'jack', 4127: 'sjoerd'}``" #: ../../builtins/stdtypes.rst:5647 -#, fuzzy msgid "Use a dict comprehension: ``{x: x ** 2 for x in range(10)}``" msgstr "" -"Verwendung einer Dict-Comprehension: ``{}``, ``{x: x ** 2 for x in range(10)}" -"``" +"Verwendung einer Dict-Comprehension: ``{x: x ** 2 for x in range(10)}``" #: ../../builtins/stdtypes.rst:5648 msgid "" @@ -10258,14 +10425,12 @@ msgstr "" "die :ref:`Dokumentation zu View-Objekten `." #: ../../builtins/stdtypes.rst:5858 -#, fuzzy msgid "" "An equality comparison between two distinct ``dict.values()`` views will " "always return ``False``, even for views of the same dictionary::" msgstr "" -"Ein Gleichheitsvergleich zwischen einem ``dict.values()``-View und einem " -"anderen gibt immer ``False`` zurück. Dies gilt auch für den Vergleich von " -"``dict.values()`` mit sich selbst::" +"Ein Gleichheitsvergleich zwischen zwei verschiedenen ``dict.values()``-Views " +"gibt immer ``False`` zurück, auch bei Views desselben Dictionarys::" #: ../../builtins/stdtypes.rst:5861 msgid "" @@ -12971,34 +13136,29 @@ msgid "iteration over" msgstr "Iteration über" #: ../../builtins/stdtypes.rst:1019 -#, fuzzy msgid "generator" msgstr "Operator" #: ../../builtins/stdtypes.rst:1029 ../../builtins/stdtypes.rst:1098 #: ../../builtins/stdtypes.rst:1139 ../../builtins/stdtypes.rst:1216 -#, fuzzy msgid "exception" -msgstr "Beschreibung" +msgstr "Ausnahme" #: ../../builtins/stdtypes.rst:1029 -#, fuzzy msgid "StopIteration" -msgstr "Operation" +msgstr "StopIteration" #: ../../builtins/stdtypes.rst:1098 ../../builtins/stdtypes.rst:1216 -#, fuzzy msgid "GeneratorExit" -msgstr "Generator-Typen" +msgstr "GeneratorExit" #: ../../builtins/stdtypes.rst:1129 msgid "asynchronous-generator" -msgstr "" +msgstr "asynchronous-generator" #: ../../builtins/stdtypes.rst:1139 -#, fuzzy msgid "StopAsyncIteration" -msgstr "Operation" +msgstr "StopAsyncIteration" #: ../../builtins/stdtypes.rst:1276 ../../builtins/stdtypes.rst:5612 msgid "len" diff --git a/builtins/threadsafety.po b/builtins/threadsafety.po index 9e39d7a3..6ffab9fb 100644 --- a/builtins/threadsafety.po +++ b/builtins/threadsafety.po @@ -817,20 +817,21 @@ msgstr "" "Sie durchlaufen alle übergebenen Iterables und tun Folgendes:" #: ../../builtins/threadsafety.rst:410 -#, fuzzy msgid "" ":meth:`set.update` and :meth:`set.union` lock both objects only when the " "other operand is a :class:`set`, :class:`frozenset`, or :class:`dict`." msgstr "" -"der andere Operand ein :class:`set`, :class:`frozenset` oder :class:`dict` " -"ist." +":meth:`set.update` und :meth:`set.union` sperren beide Objekte nur dann, " +"wenn der andere Operand ein :class:`set`, :class:`frozenset` " +"oder :class:`dict` ist." #: ../../builtins/threadsafety.rst:412 -#, fuzzy msgid "" ":meth:`set.intersection` and :meth:`set.difference` always try to lock all " "objects." -msgstr ":meth:`set.intersection` und :meth:`set.difference` versuchen immer," +msgstr "" +":meth:`set.intersection` und :meth:`set.difference` versuchen immer, alle " +"Objekte zu sperren." #: ../../builtins/threadsafety.rst:415 msgid ":meth:`set.symmetric_difference` tries to lock both objects." @@ -845,20 +846,20 @@ msgstr "" "untereinander ebenfalls in einigen Punkten:" #: ../../builtins/threadsafety.rst:420 -#, fuzzy msgid "" ":meth:`set.difference_update` and :meth:`set.intersection_update` try to " "lock all objects one-by-one." msgstr "" -":meth:`set.difference_update` und :meth:`set.intersection_update` versuchen," +":meth:`set.difference_update` und :meth:`set.intersection_update` versuchen, " +"alle Objekte nacheinander zu sperren." #: ../../builtins/threadsafety.rst:422 -#, fuzzy msgid "" ":meth:`set.symmetric_difference_update` only locks the arguments if it is of " "type :class:`set`, :class:`frozenset`, or :class:`dict`." msgstr "" -":meth:`set.symmetric_difference_update` sperrt die Argumente nur, wenn sie" +":meth:`set.symmetric_difference_update` sperrt die Argumente nur, wenn sie " +"vom Typ :class:`set`, :class:`frozenset` oder :class:`dict` sind." #: ../../builtins/threadsafety.rst:425 msgid "The following methods always try to lock both objects:" diff --git a/c-api/typeobj.po b/c-api/typeobj.po index 1624595d..a196f21d 100644 --- a/c-api/typeobj.po +++ b/c-api/typeobj.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: Python 3.15\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-11-01 00:10+0000\n" -"PO-Revision-Date: 2025-09-16 00:00+0000\n" +"PO-Revision-Date: 2026-11-01 13:00+0100\n" "Last-Translator: python-doc bot, 2025\n" "Language-Team: German (https://app.transifex.com/python-doc/teams/5390/de/)\n" "Language: de\n" @@ -23,7 +23,7 @@ msgstr "" #: ../../c-api/typeobj.rst:6 msgid "Type Object Structures" -msgstr "" +msgstr "Typobjekt-Strukturen" #: ../../c-api/typeobj.rst:8 msgid "" @@ -35,6 +35,13 @@ msgid "" "they are very important to the interpreter itself and to any extension " "module that implements new types." msgstr "" +"Eine der wichtigsten Strukturen des Python-Objektsystems ist vielleicht die " +"Struktur, die einen neuen Typ festlegt: die Struktur :c:type:`PyTypeObject`. " +"Typobjekte lassen sich mit allen ``PyObject_*``- oder ``PyType_*``-" +"Funktionen behandeln, bieten den meisten Python-Anwendungen aber wenig " +"Interessantes. Diese Objekte sind grundlegend dafür, wie Objekte sich " +"verhalten, und deshalb für den Interpreter selbst und für jedes " +"Erweiterungsmodul, das neue Typen umsetzt, sehr wichtig." #: ../../c-api/typeobj.rst:16 msgid "" @@ -45,6 +52,12 @@ msgid "" "detail in this section. The fields will be described in the order in which " "they occur in the structure." msgstr "" +"Typobjekte sind im Vergleich zu den meisten Standardtypen ziemlich groß. Der " +"Grund für die Größe ist, dass jedes Typobjekt eine große Anzahl von Werten " +"speichert, überwiegend C-Funktionszeiger, von denen jeder einen kleinen Teil " +"der Funktionalität des Typs umsetzt. Die Felder des Typobjekts werden in " +"diesem Abschnitt im Einzelnen untersucht. Sie werden in der Reihenfolge " +"beschrieben, in der sie in der Struktur vorkommen." #: ../../c-api/typeobj.rst:23 msgid "" @@ -52,59 +65,62 @@ msgid "" "section provides at-a-glance insight into the meaning and use " "of :c:type:`PyTypeObject`." msgstr "" +"Zusätzlich zur folgenden Kurzübersicht bietet der Abschnitt :ref:`typedef-" +"examples` einen schnellen Einblick in Bedeutung und Verwendung " +"von :c:type:`PyTypeObject`." #: ../../c-api/typeobj.rst:29 msgid "Quick Reference" -msgstr "" +msgstr "Kurzübersicht" #: ../../c-api/typeobj.rst:34 msgid "\"tp slots\"" -msgstr "" +msgstr "„tp-Slots“" #: ../../c-api/typeobj.rst:40 msgid "PyTypeObject Slot [#slots]_" -msgstr "" +msgstr "PyTypeObject-Slot [#slots]_" #: ../../c-api/typeobj.rst:40 ../../c-api/typeobj.rst:201 msgid ":ref:`Type `" -msgstr "" +msgstr ":ref:`Typ `" #: ../../c-api/typeobj.rst:40 msgid "special methods/attrs" -msgstr "" +msgstr "Spezialmethoden/-attribute" #: ../../c-api/typeobj.rst:40 msgid "Info [#cols]_" -msgstr "" +msgstr "Info [#cols]_" #: ../../c-api/typeobj.rst:42 msgid "O" -msgstr "" +msgstr "O" #: ../../c-api/typeobj.rst:42 msgid "T" -msgstr "" +msgstr "T" #: ../../c-api/typeobj.rst:42 msgid "D" -msgstr "" +msgstr "D" #: ../../c-api/typeobj.rst:42 msgid "I" -msgstr "" +msgstr "I" #: ../../c-api/typeobj.rst:44 msgid " :c:member:`~PyTypeObject.tp_name`" -msgstr "" +msgstr " :c:member:`~PyTypeObject.tp_name`" #: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:86 #: ../../c-api/typeobj.rst:372 ../../c-api/typeobj.rst:377 msgid "const char *" -msgstr "" +msgstr "const char *" #: ../../c-api/typeobj.rst:44 msgid "__name__" -msgstr "" +msgstr "__name__" #: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:46 #: ../../c-api/typeobj.rst:48 ../../c-api/typeobj.rst:50 @@ -123,11 +139,11 @@ msgstr "" #: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:128 #: ../../c-api/typeobj.rst:130 ../../c-api/typeobj.rst:146 msgid "X" -msgstr "" +msgstr "X" #: ../../c-api/typeobj.rst:46 msgid ":c:member:`~PyTypeObject.tp_basicsize`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_basicsize`" #: ../../c-api/typeobj.rst:46 ../../c-api/typeobj.rst:48 #: ../../c-api/typeobj.rst:52 ../../c-api/typeobj.rst:99 @@ -135,290 +151,290 @@ msgstr "" #: ../../c-api/typeobj.rst:417 ../../c-api/typeobj.rst:448 #: ../../c-api/typeobj.rst:453 msgid ":c:type:`Py_ssize_t`" -msgstr "" +msgstr ":c:type:`Py_ssize_t`" #: ../../c-api/typeobj.rst:48 msgid ":c:member:`~PyTypeObject.tp_itemsize`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_itemsize`" #: ../../c-api/typeobj.rst:50 msgid ":c:member:`~PyTypeObject.tp_dealloc`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_dealloc`" #: ../../c-api/typeobj.rst:50 ../../c-api/typeobj.rst:142 #: ../../c-api/typeobj.rst:146 ../../c-api/typeobj.rst:347 msgid ":c:type:`destructor`" -msgstr "" +msgstr ":c:type:`destructor`" #: ../../c-api/typeobj.rst:52 msgid ":c:member:`~PyTypeObject.tp_vectorcall_offset`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_vectorcall_offset`" #: ../../c-api/typeobj.rst:54 msgid "(:c:member:`~PyTypeObject.tp_getattr`)" -msgstr "" +msgstr "(:c:member:`~PyTypeObject.tp_getattr`)" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:371 msgid ":c:type:`getattrfunc`" -msgstr "" +msgstr ":c:type:`getattrfunc`" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:76 msgid "__getattribute__, __getattr__" -msgstr "" +msgstr "__getattribute__, __getattr__" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:57 #: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:76 #: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:88 #: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:92 msgid "G" -msgstr "" +msgstr "G" #: ../../c-api/typeobj.rst:57 msgid "(:c:member:`~PyTypeObject.tp_setattr`)" -msgstr "" +msgstr "(:c:member:`~PyTypeObject.tp_setattr`)" #: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:376 msgid ":c:type:`setattrfunc`" -msgstr "" +msgstr ":c:type:`setattrfunc`" #: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:79 msgid "__setattr__, __delattr__" -msgstr "" +msgstr "__setattr__, __delattr__" #: ../../c-api/typeobj.rst:60 msgid ":c:member:`~PyTypeObject.tp_as_async`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_as_async`" #: ../../c-api/typeobj.rst:60 msgid ":c:type:`PyAsyncMethods` *" -msgstr "" +msgstr ":c:type:`PyAsyncMethods` *" #: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 #: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 #: ../../c-api/typeobj.rst:82 msgid ":ref:`sub-slots`" -msgstr "" +msgstr ":ref:`sub-slots`" #: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 #: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 #: ../../c-api/typeobj.rst:82 msgid "%" -msgstr "" +msgstr "%" #: ../../c-api/typeobj.rst:62 msgid ":c:member:`~PyTypeObject.tp_repr`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_repr`" #: ../../c-api/typeobj.rst:62 ../../c-api/typeobj.rst:74 #: ../../c-api/typeobj.rst:369 msgid ":c:type:`reprfunc`" -msgstr "" +msgstr ":c:type:`reprfunc`" #: ../../c-api/typeobj.rst:62 msgid "__repr__" -msgstr "" +msgstr "__repr__" #: ../../c-api/typeobj.rst:64 msgid ":c:member:`~PyTypeObject.tp_as_number`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_as_number`" #: ../../c-api/typeobj.rst:64 msgid ":c:type:`PyNumberMethods` *" -msgstr "" +msgstr ":c:type:`PyNumberMethods` *" #: ../../c-api/typeobj.rst:66 msgid ":c:member:`~PyTypeObject.tp_as_sequence`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_as_sequence`" #: ../../c-api/typeobj.rst:66 msgid ":c:type:`PySequenceMethods` *" -msgstr "" +msgstr ":c:type:`PySequenceMethods` *" #: ../../c-api/typeobj.rst:68 msgid ":c:member:`~PyTypeObject.tp_as_mapping`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_as_mapping`" #: ../../c-api/typeobj.rst:68 msgid ":c:type:`PyMappingMethods` *" -msgstr "" +msgstr ":c:type:`PyMappingMethods` *" #: ../../c-api/typeobj.rst:70 msgid ":c:member:`~PyTypeObject.tp_hash`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_hash`" #: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:405 msgid ":c:type:`hashfunc`" -msgstr "" +msgstr ":c:type:`hashfunc`" #: ../../c-api/typeobj.rst:70 msgid "__hash__" -msgstr "" +msgstr "__hash__" #: ../../c-api/typeobj.rst:72 msgid ":c:member:`~PyTypeObject.tp_call`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_call`" #: ../../c-api/typeobj.rst:72 ../../c-api/typeobj.rst:237 #: ../../c-api/typeobj.rst:240 ../../c-api/typeobj.rst:441 msgid ":c:type:`ternaryfunc`" -msgstr "" +msgstr ":c:type:`ternaryfunc`" #: ../../c-api/typeobj.rst:72 msgid "__call__" -msgstr "" +msgstr "__call__" #: ../../c-api/typeobj.rst:74 msgid ":c:member:`~PyTypeObject.tp_str`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_str`" #: ../../c-api/typeobj.rst:74 msgid "__str__" -msgstr "" +msgstr "__str__" #: ../../c-api/typeobj.rst:76 msgid ":c:member:`~PyTypeObject.tp_getattro`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_getattro`" #: ../../c-api/typeobj.rst:76 ../../c-api/typeobj.rst:382 msgid ":c:type:`getattrofunc`" -msgstr "" +msgstr ":c:type:`getattrofunc`" #: ../../c-api/typeobj.rst:79 msgid ":c:member:`~PyTypeObject.tp_setattro`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_setattro`" #: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:387 msgid ":c:type:`setattrofunc`" -msgstr "" +msgstr ":c:type:`setattrofunc`" #: ../../c-api/typeobj.rst:82 msgid ":c:member:`~PyTypeObject.tp_as_buffer`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_as_buffer`" #: ../../c-api/typeobj.rst:82 msgid ":c:type:`PyBufferProcs` *" -msgstr "" +msgstr ":c:type:`PyBufferProcs` *" #: ../../c-api/typeobj.rst:84 msgid ":c:member:`~PyTypeObject.tp_flags`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_flags`" #: ../../c-api/typeobj.rst:84 msgid "unsigned long" -msgstr "" +msgstr "unsigned long" #: ../../c-api/typeobj.rst:84 ../../c-api/typeobj.rst:99 #: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:120 #: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:126 #: ../../c-api/typeobj.rst:128 msgid "?" -msgstr "" +msgstr "?" #: ../../c-api/typeobj.rst:86 msgid ":c:member:`~PyTypeObject.tp_doc`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_doc`" #: ../../c-api/typeobj.rst:86 msgid "__doc__" -msgstr "" +msgstr "__doc__" #: ../../c-api/typeobj.rst:88 msgid ":c:member:`~PyTypeObject.tp_traverse`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_traverse`" #: ../../c-api/typeobj.rst:88 ../../c-api/typeobj.rst:351 msgid ":c:type:`traverseproc`" -msgstr "" +msgstr ":c:type:`traverseproc`" #: ../../c-api/typeobj.rst:90 msgid ":c:member:`~PyTypeObject.tp_clear`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_clear`" #: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:130 #: ../../c-api/typeobj.rst:248 ../../c-api/typeobj.rst:430 msgid ":c:type:`inquiry`" -msgstr "" +msgstr ":c:type:`inquiry`" #: ../../c-api/typeobj.rst:92 msgid ":c:member:`~PyTypeObject.tp_richcompare`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_richcompare`" #: ../../c-api/typeobj.rst:92 ../../c-api/typeobj.rst:407 msgid ":c:type:`richcmpfunc`" -msgstr "" +msgstr ":c:type:`richcmpfunc`" #: ../../c-api/typeobj.rst:92 msgid "__lt__, __le__, __eq__, __ne__, __gt__, __ge__" -msgstr "" +msgstr "__lt__, __le__, __eq__, __ne__, __gt__, __ge__" #: ../../c-api/typeobj.rst:99 msgid "(:c:member:`~PyTypeObject.tp_weaklistoffset`)" -msgstr "" +msgstr "(:c:member:`~PyTypeObject.tp_weaklistoffset`)" #: ../../c-api/typeobj.rst:101 msgid ":c:member:`~PyTypeObject.tp_iter`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_iter`" #: ../../c-api/typeobj.rst:101 ../../c-api/typeobj.rst:413 msgid ":c:type:`getiterfunc`" -msgstr "" +msgstr ":c:type:`getiterfunc`" #: ../../c-api/typeobj.rst:101 msgid "__iter__" -msgstr "" +msgstr "__iter__" #: ../../c-api/typeobj.rst:103 msgid ":c:member:`~PyTypeObject.tp_iternext`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_iternext`" #: ../../c-api/typeobj.rst:103 ../../c-api/typeobj.rst:415 msgid ":c:type:`iternextfunc`" -msgstr "" +msgstr ":c:type:`iternextfunc`" #: ../../c-api/typeobj.rst:103 msgid "__next__" -msgstr "" +msgstr "__next__" #: ../../c-api/typeobj.rst:105 msgid ":c:member:`~PyTypeObject.tp_methods`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_methods`" #: ../../c-api/typeobj.rst:105 msgid ":c:type:`PyMethodDef` []" -msgstr "" +msgstr ":c:type:`PyMethodDef` []" #: ../../c-api/typeobj.rst:107 msgid ":c:member:`~PyTypeObject.tp_members`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_members`" #: ../../c-api/typeobj.rst:107 msgid ":c:type:`PyMemberDef` []" -msgstr "" +msgstr ":c:type:`PyMemberDef` []" #: ../../c-api/typeobj.rst:109 msgid ":c:member:`~PyTypeObject.tp_getset`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_getset`" #: ../../c-api/typeobj.rst:109 msgid ":c:type:`PyGetSetDef` []" -msgstr "" +msgstr ":c:type:`PyGetSetDef` []" #: ../../c-api/typeobj.rst:111 msgid ":c:member:`~PyTypeObject.tp_base`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_base`" #: ../../c-api/typeobj.rst:111 ../../c-api/typeobj.rst:342 #: ../../c-api/typeobj.rst:357 msgid ":c:type:`PyTypeObject` *" -msgstr "" +msgstr ":c:type:`PyTypeObject` *" #: ../../c-api/typeobj.rst:111 msgid "__base__" -msgstr "" +msgstr "__base__" #: ../../c-api/typeobj.rst:113 msgid ":c:member:`~PyTypeObject.tp_dict`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_dict`" #: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:132 #: ../../c-api/typeobj.rst:134 ../../c-api/typeobj.rst:136 @@ -447,148 +463,148 @@ msgstr "" #: ../../c-api/typeobj.rst:459 ../../c-api/typeobj.rst:463 #: ../../c-api/typeobj.rst:464 ../../c-api/typeobj.rst:465 msgid ":c:type:`PyObject` *" -msgstr "" +msgstr ":c:type:`PyObject` *" #: ../../c-api/typeobj.rst:113 msgid "__dict__" -msgstr "" +msgstr "__dict__" #: ../../c-api/typeobj.rst:115 msgid ":c:member:`~PyTypeObject.tp_descr_get`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_descr_get`" #: ../../c-api/typeobj.rst:115 ../../c-api/typeobj.rst:393 msgid ":c:type:`descrgetfunc`" -msgstr "" +msgstr ":c:type:`descrgetfunc`" #: ../../c-api/typeobj.rst:115 msgid "__get__" -msgstr "" +msgstr "__get__" #: ../../c-api/typeobj.rst:117 msgid ":c:member:`~PyTypeObject.tp_descr_set`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_descr_set`" #: ../../c-api/typeobj.rst:117 ../../c-api/typeobj.rst:399 msgid ":c:type:`descrsetfunc`" -msgstr "" +msgstr ":c:type:`descrsetfunc`" #: ../../c-api/typeobj.rst:117 msgid "__set__, __delete__" -msgstr "" +msgstr "__set__, __delete__" #: ../../c-api/typeobj.rst:120 msgid "(:c:member:`~PyTypeObject.tp_dictoffset`)" -msgstr "" +msgstr "(:c:member:`~PyTypeObject.tp_dictoffset`)" #: ../../c-api/typeobj.rst:122 msgid ":c:member:`~PyTypeObject.tp_init`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_init`" #: ../../c-api/typeobj.rst:122 ../../c-api/typeobj.rst:363 msgid ":c:type:`initproc`" -msgstr "" +msgstr ":c:type:`initproc`" #: ../../c-api/typeobj.rst:122 msgid "__init__" -msgstr "" +msgstr "__init__" #: ../../c-api/typeobj.rst:124 msgid ":c:member:`~PyTypeObject.tp_alloc`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_alloc`" #: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:342 msgid ":c:type:`allocfunc`" -msgstr "" +msgstr ":c:type:`allocfunc`" #: ../../c-api/typeobj.rst:126 msgid ":c:member:`~PyTypeObject.tp_new`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_new`" #: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:357 msgid ":c:type:`newfunc`" -msgstr "" +msgstr ":c:type:`newfunc`" #: ../../c-api/typeobj.rst:126 msgid "__new__" -msgstr "" +msgstr "__new__" #: ../../c-api/typeobj.rst:128 msgid ":c:member:`~PyTypeObject.tp_free`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_free`" #: ../../c-api/typeobj.rst:128 ../../c-api/typeobj.rst:349 msgid ":c:type:`freefunc`" -msgstr "" +msgstr ":c:type:`freefunc`" #: ../../c-api/typeobj.rst:130 msgid ":c:member:`~PyTypeObject.tp_is_gc`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_is_gc`" #: ../../c-api/typeobj.rst:132 msgid "<:c:member:`~PyTypeObject.tp_bases`>" -msgstr "" +msgstr "<:c:member:`~PyTypeObject.tp_bases`>" #: ../../c-api/typeobj.rst:132 msgid "__bases__" -msgstr "" +msgstr "__bases__" #: ../../c-api/typeobj.rst:132 ../../c-api/typeobj.rst:134 msgid "~" -msgstr "" +msgstr "~" #: ../../c-api/typeobj.rst:134 msgid "<:c:member:`~PyTypeObject.tp_mro`>" -msgstr "" +msgstr "<:c:member:`~PyTypeObject.tp_mro`>" #: ../../c-api/typeobj.rst:134 msgid "__mro__" -msgstr "" +msgstr "__mro__" #: ../../c-api/typeobj.rst:136 msgid "[:c:member:`~PyTypeObject.tp_cache`]" -msgstr "" +msgstr "[:c:member:`~PyTypeObject.tp_cache`]" #: ../../c-api/typeobj.rst:138 msgid "[:c:member:`~PyTypeObject.tp_subclasses`]" -msgstr "" +msgstr "[:c:member:`~PyTypeObject.tp_subclasses`]" #: ../../c-api/typeobj.rst:138 ../../c-api/typeobj.rst:279 #: ../../c-api/typeobj.rst:349 ../../c-api/typeobj.rst:353 msgid "void *" -msgstr "" +msgstr "void *" #: ../../c-api/typeobj.rst:138 msgid "__subclasses__" -msgstr "" +msgstr "__subclasses__" #: ../../c-api/typeobj.rst:140 msgid "[:c:member:`~PyTypeObject.tp_weaklist`]" -msgstr "" +msgstr "[:c:member:`~PyTypeObject.tp_weaklist`]" #: ../../c-api/typeobj.rst:142 msgid "(:c:member:`~PyTypeObject.tp_del`)" -msgstr "" +msgstr "(:c:member:`~PyTypeObject.tp_del`)" #: ../../c-api/typeobj.rst:144 msgid "[:c:member:`~PyTypeObject.tp_version_tag`]" -msgstr "" +msgstr "[:c:member:`~PyTypeObject.tp_version_tag`]" #: ../../c-api/typeobj.rst:144 msgid "unsigned int" -msgstr "" +msgstr "unsigned int" #: ../../c-api/typeobj.rst:146 msgid ":c:member:`~PyTypeObject.tp_finalize`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_finalize`" #: ../../c-api/typeobj.rst:146 msgid "__del__" -msgstr "" +msgstr "__del__" #: ../../c-api/typeobj.rst:148 msgid ":c:member:`~PyTypeObject.tp_vectorcall`" -msgstr "" +msgstr ":c:member:`~PyTypeObject.tp_vectorcall`" #: ../../c-api/typeobj.rst:148 msgid ":c:type:`vectorcallfunc`" @@ -596,47 +612,52 @@ msgstr ":c:type:`vectorcallfunc`" #: ../../c-api/typeobj.rst:150 msgid "[:c:member:`~PyTypeObject.tp_watched`]" -msgstr "" +msgstr "[:c:member:`~PyTypeObject.tp_watched`]" #: ../../c-api/typeobj.rst:150 msgid "unsigned char" -msgstr "" +msgstr "unsigned char" #: ../../c-api/typeobj.rst:155 msgid "" "**()**: A slot name in parentheses indicates it is (effectively) deprecated." msgstr "" +"**()**: Ein Slot-Name in Klammern bedeutet, dass er (praktisch) veraltet ist." #: ../../c-api/typeobj.rst:157 msgid "" "**<>**: Names in angle brackets should be initially set to ``NULL`` and " "treated as read-only." msgstr "" +"**<>**: Namen in spitzen Klammern sollten anfangs auf ``NULL`` gesetzt und " +"als nur lesbar behandelt werden." #: ../../c-api/typeobj.rst:160 msgid "**[]**: Names in square brackets are for internal use only." -msgstr "" +msgstr "**[]**: Namen in eckigen Klammern sind nur für den internen Gebrauch." #: ../../c-api/typeobj.rst:162 msgid "" "**** (as a prefix) means the field is required (must be non-``NULL``)." msgstr "" +"**** (als Präfix) bedeutet, dass das Feld erforderlich ist (darf nicht " +"``NULL`` sein)." #: ../../c-api/typeobj.rst:164 msgid "Columns:" -msgstr "" +msgstr "Spalten:" #: ../../c-api/typeobj.rst:166 msgid "**\"O\"**: set on :c:data:`PyBaseObject_Type`" -msgstr "" +msgstr "**\"O\"**: an :c:data:`PyBaseObject_Type` gesetzt" #: ../../c-api/typeobj.rst:168 msgid "**\"T\"**: set on :c:data:`PyType_Type`" -msgstr "" +msgstr "**\"T\"**: an :c:data:`PyType_Type` gesetzt" #: ../../c-api/typeobj.rst:170 msgid "**\"D\"**: default (if slot is set to ``NULL``)" -msgstr "" +msgstr "**\"D\"**: Vorgabe (wenn der Slot auf ``NULL`` gesetzt ist)" #: ../../c-api/typeobj.rst:172 msgid "" @@ -646,10 +667,15 @@ msgid "" "\n" "Also see the inheritance column (\"I\")." msgstr "" +"X - PyType_Ready setzt diesen Wert, wenn er NULL ist\n" +"~ - PyType_Ready setzt diesen Wert immer (er sollte NULL sein)\n" +"? - PyType_Ready setzt diesen Wert je nach anderen Slots\n" +"\n" +"Siehe auch die Vererbungsspalte (\"I\")." #: ../../c-api/typeobj.rst:180 msgid "**\"I\"**: inheritance" -msgstr "" +msgstr "**\"I\"**: Vererbung" #: ../../c-api/typeobj.rst:182 msgid "" @@ -660,28 +686,36 @@ msgid "" "description\n" "? - it's complicated; see the slot's description" msgstr "" +"X - Typ-Slot wird über *PyType_Ready* vererbt, wenn er mit einem *NULL*-Wert " +"festgelegt ist\n" +"% - die Slots der Unterstruktur werden einzeln vererbt\n" +"G - vererbt, aber nur in Verbindung mit anderen Slots -- siehe die " +"Beschreibung des Slots\n" +"? - es ist kompliziert -- siehe die Beschreibung des Slots" #: ../../c-api/typeobj.rst:189 msgid "" "Note that some slots are effectively inherited through the normal attribute " "lookup chain." msgstr "" +"Beachte, dass manche Slots praktisch über die normale Kette der " +"Attributsuche vererbt werden." #: ../../c-api/typeobj.rst:195 msgid "sub-slots" -msgstr "" +msgstr "Unter-Slots" #: ../../c-api/typeobj.rst:201 msgid "Slot" -msgstr "" +msgstr "Slot" #: ../../c-api/typeobj.rst:201 msgid "special methods" -msgstr "" +msgstr "Spezialmethoden" #: ../../c-api/typeobj.rst:204 msgid ":c:member:`~PyAsyncMethods.am_await`" -msgstr "" +msgstr ":c:member:`~PyAsyncMethods.am_await`" #: ../../c-api/typeobj.rst:204 ../../c-api/typeobj.rst:206 #: ../../c-api/typeobj.rst:208 ../../c-api/typeobj.rst:242 @@ -690,39 +724,39 @@ msgstr "" #: ../../c-api/typeobj.rst:281 ../../c-api/typeobj.rst:291 #: ../../c-api/typeobj.rst:432 msgid ":c:type:`unaryfunc`" -msgstr "" +msgstr ":c:type:`unaryfunc`" #: ../../c-api/typeobj.rst:204 msgid "__await__" -msgstr "" +msgstr "__await__" #: ../../c-api/typeobj.rst:206 msgid ":c:member:`~PyAsyncMethods.am_aiter`" -msgstr "" +msgstr ":c:member:`~PyAsyncMethods.am_aiter`" #: ../../c-api/typeobj.rst:206 msgid "__aiter__" -msgstr "" +msgstr "__aiter__" #: ../../c-api/typeobj.rst:208 msgid ":c:member:`~PyAsyncMethods.am_anext`" -msgstr "" +msgstr ":c:member:`~PyAsyncMethods.am_anext`" #: ../../c-api/typeobj.rst:208 msgid "__anext__" -msgstr "" +msgstr "__anext__" #: ../../c-api/typeobj.rst:210 msgid ":c:member:`~PyAsyncMethods.am_send`" -msgstr "" +msgstr ":c:member:`~PyAsyncMethods.am_send`" #: ../../c-api/typeobj.rst:210 msgid ":c:type:`sendfunc`" -msgstr "" +msgstr ":c:type:`sendfunc`" #: ../../c-api/typeobj.rst:214 msgid ":c:member:`~PyNumberMethods.nb_add`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_add`" #: ../../c-api/typeobj.rst:214 ../../c-api/typeobj.rst:217 #: ../../c-api/typeobj.rst:219 ../../c-api/typeobj.rst:222 @@ -740,430 +774,430 @@ msgstr "" #: ../../c-api/typeobj.rst:311 ../../c-api/typeobj.rst:322 #: ../../c-api/typeobj.rst:436 msgid ":c:type:`binaryfunc`" -msgstr "" +msgstr ":c:type:`binaryfunc`" #: ../../c-api/typeobj.rst:214 msgid "__add__ __radd__" -msgstr "" +msgstr "__add__ __radd__" #: ../../c-api/typeobj.rst:217 msgid ":c:member:`~PyNumberMethods.nb_inplace_add`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_add`" #: ../../c-api/typeobj.rst:217 ../../c-api/typeobj.rst:322 msgid "__iadd__" -msgstr "" +msgstr "__iadd__" #: ../../c-api/typeobj.rst:219 msgid ":c:member:`~PyNumberMethods.nb_subtract`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_subtract`" #: ../../c-api/typeobj.rst:219 msgid "__sub__ __rsub__" -msgstr "" +msgstr "__sub__ __rsub__" #: ../../c-api/typeobj.rst:222 msgid ":c:member:`~PyNumberMethods.nb_inplace_subtract`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_subtract`" #: ../../c-api/typeobj.rst:222 msgid "__isub__" -msgstr "" +msgstr "__isub__" #: ../../c-api/typeobj.rst:224 msgid ":c:member:`~PyNumberMethods.nb_multiply`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_multiply`" #: ../../c-api/typeobj.rst:224 msgid "__mul__ __rmul__" -msgstr "" +msgstr "__mul__ __rmul__" #: ../../c-api/typeobj.rst:227 msgid ":c:member:`~PyNumberMethods.nb_inplace_multiply`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_multiply`" #: ../../c-api/typeobj.rst:227 ../../c-api/typeobj.rst:324 msgid "__imul__" -msgstr "" +msgstr "__imul__" #: ../../c-api/typeobj.rst:229 msgid ":c:member:`~PyNumberMethods.nb_remainder`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_remainder`" #: ../../c-api/typeobj.rst:229 msgid "__mod__ __rmod__" -msgstr "" +msgstr "__mod__ __rmod__" #: ../../c-api/typeobj.rst:232 msgid ":c:member:`~PyNumberMethods.nb_inplace_remainder`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_remainder`" #: ../../c-api/typeobj.rst:232 msgid "__imod__" -msgstr "" +msgstr "__imod__" #: ../../c-api/typeobj.rst:234 msgid ":c:member:`~PyNumberMethods.nb_divmod`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_divmod`" #: ../../c-api/typeobj.rst:234 msgid "__divmod__ __rdivmod__" -msgstr "" +msgstr "__divmod__ __rdivmod__" #: ../../c-api/typeobj.rst:237 msgid ":c:member:`~PyNumberMethods.nb_power`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_power`" #: ../../c-api/typeobj.rst:237 msgid "__pow__ __rpow__" -msgstr "" +msgstr "__pow__ __rpow__" #: ../../c-api/typeobj.rst:240 msgid ":c:member:`~PyNumberMethods.nb_inplace_power`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_power`" #: ../../c-api/typeobj.rst:240 msgid "__ipow__" -msgstr "" +msgstr "__ipow__" #: ../../c-api/typeobj.rst:242 msgid ":c:member:`~PyNumberMethods.nb_negative`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_negative`" #: ../../c-api/typeobj.rst:242 msgid "__neg__" -msgstr "" +msgstr "__neg__" #: ../../c-api/typeobj.rst:244 msgid ":c:member:`~PyNumberMethods.nb_positive`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_positive`" #: ../../c-api/typeobj.rst:244 msgid "__pos__" -msgstr "" +msgstr "__pos__" #: ../../c-api/typeobj.rst:246 msgid ":c:member:`~PyNumberMethods.nb_absolute`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_absolute`" #: ../../c-api/typeobj.rst:246 msgid "__abs__" -msgstr "" +msgstr "__abs__" #: ../../c-api/typeobj.rst:248 msgid ":c:member:`~PyNumberMethods.nb_bool`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_bool`" #: ../../c-api/typeobj.rst:248 msgid "__bool__" -msgstr "" +msgstr "__bool__" #: ../../c-api/typeobj.rst:250 msgid ":c:member:`~PyNumberMethods.nb_invert`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_invert`" #: ../../c-api/typeobj.rst:250 msgid "__invert__" -msgstr "" +msgstr "__invert__" #: ../../c-api/typeobj.rst:252 msgid ":c:member:`~PyNumberMethods.nb_lshift`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_lshift`" #: ../../c-api/typeobj.rst:252 msgid "__lshift__ __rlshift__" -msgstr "" +msgstr "__lshift__ __rlshift__" #: ../../c-api/typeobj.rst:255 msgid ":c:member:`~PyNumberMethods.nb_inplace_lshift`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_lshift`" #: ../../c-api/typeobj.rst:255 msgid "__ilshift__" -msgstr "" +msgstr "__ilshift__" #: ../../c-api/typeobj.rst:257 msgid ":c:member:`~PyNumberMethods.nb_rshift`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_rshift`" #: ../../c-api/typeobj.rst:257 msgid "__rshift__ __rrshift__" -msgstr "" +msgstr "__rshift__ __rrshift__" #: ../../c-api/typeobj.rst:260 msgid ":c:member:`~PyNumberMethods.nb_inplace_rshift`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_rshift`" #: ../../c-api/typeobj.rst:260 msgid "__irshift__" -msgstr "" +msgstr "__irshift__" #: ../../c-api/typeobj.rst:262 msgid ":c:member:`~PyNumberMethods.nb_and`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_and`" #: ../../c-api/typeobj.rst:262 msgid "__and__ __rand__" -msgstr "" +msgstr "__and__ __rand__" #: ../../c-api/typeobj.rst:265 msgid ":c:member:`~PyNumberMethods.nb_inplace_and`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_and`" #: ../../c-api/typeobj.rst:265 msgid "__iand__" -msgstr "" +msgstr "__iand__" #: ../../c-api/typeobj.rst:267 msgid ":c:member:`~PyNumberMethods.nb_xor`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_xor`" #: ../../c-api/typeobj.rst:267 msgid "__xor__ __rxor__" -msgstr "" +msgstr "__xor__ __rxor__" #: ../../c-api/typeobj.rst:270 msgid ":c:member:`~PyNumberMethods.nb_inplace_xor`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_xor`" #: ../../c-api/typeobj.rst:270 msgid "__ixor__" -msgstr "" +msgstr "__ixor__" #: ../../c-api/typeobj.rst:272 msgid ":c:member:`~PyNumberMethods.nb_or`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_or`" #: ../../c-api/typeobj.rst:272 msgid "__or__ __ror__" -msgstr "" +msgstr "__or__ __ror__" #: ../../c-api/typeobj.rst:275 msgid ":c:member:`~PyNumberMethods.nb_inplace_or`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_or`" #: ../../c-api/typeobj.rst:275 msgid "__ior__" -msgstr "" +msgstr "__ior__" #: ../../c-api/typeobj.rst:277 msgid ":c:member:`~PyNumberMethods.nb_int`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_int`" #: ../../c-api/typeobj.rst:277 msgid "__int__" -msgstr "" +msgstr "__int__" #: ../../c-api/typeobj.rst:279 msgid ":c:member:`~PyNumberMethods.nb_reserved`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_reserved`" #: ../../c-api/typeobj.rst:281 msgid ":c:member:`~PyNumberMethods.nb_float`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_float`" #: ../../c-api/typeobj.rst:281 msgid "__float__" -msgstr "" +msgstr "__float__" #: ../../c-api/typeobj.rst:283 msgid ":c:member:`~PyNumberMethods.nb_floor_divide`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_floor_divide`" #: ../../c-api/typeobj.rst:283 msgid "__floordiv__" -msgstr "" +msgstr "__floordiv__" #: ../../c-api/typeobj.rst:285 msgid ":c:member:`~PyNumberMethods.nb_inplace_floor_divide`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_floor_divide`" #: ../../c-api/typeobj.rst:285 msgid "__ifloordiv__" -msgstr "" +msgstr "__ifloordiv__" #: ../../c-api/typeobj.rst:287 msgid ":c:member:`~PyNumberMethods.nb_true_divide`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_true_divide`" #: ../../c-api/typeobj.rst:287 msgid "__truediv__" -msgstr "" +msgstr "__truediv__" #: ../../c-api/typeobj.rst:289 msgid ":c:member:`~PyNumberMethods.nb_inplace_true_divide`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_true_divide`" #: ../../c-api/typeobj.rst:289 msgid "__itruediv__" -msgstr "" +msgstr "__itruediv__" #: ../../c-api/typeobj.rst:291 msgid ":c:member:`~PyNumberMethods.nb_index`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_index`" #: ../../c-api/typeobj.rst:291 msgid "__index__" -msgstr "" +msgstr "__index__" #: ../../c-api/typeobj.rst:293 msgid ":c:member:`~PyNumberMethods.nb_matrix_multiply`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_matrix_multiply`" #: ../../c-api/typeobj.rst:293 msgid "__matmul__ __rmatmul__" -msgstr "" +msgstr "__matmul__ __rmatmul__" #: ../../c-api/typeobj.rst:296 msgid ":c:member:`~PyNumberMethods.nb_inplace_matrix_multiply`" -msgstr "" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_matrix_multiply`" #: ../../c-api/typeobj.rst:296 msgid "__imatmul__" -msgstr "" +msgstr "__imatmul__" #: ../../c-api/typeobj.rst:300 msgid ":c:member:`~PyMappingMethods.mp_length`" -msgstr "" +msgstr ":c:member:`~PyMappingMethods.mp_length`" #: ../../c-api/typeobj.rst:300 ../../c-api/typeobj.rst:309 #: ../../c-api/typeobj.rst:417 msgid ":c:type:`lenfunc`" -msgstr "" +msgstr ":c:type:`lenfunc`" #: ../../c-api/typeobj.rst:300 ../../c-api/typeobj.rst:309 msgid "__len__" -msgstr "" +msgstr "__len__" #: ../../c-api/typeobj.rst:302 msgid ":c:member:`~PyMappingMethods.mp_subscript`" -msgstr "" +msgstr ":c:member:`~PyMappingMethods.mp_subscript`" #: ../../c-api/typeobj.rst:302 ../../c-api/typeobj.rst:315 msgid "__getitem__" -msgstr "" +msgstr "__getitem__" #: ../../c-api/typeobj.rst:304 msgid ":c:member:`~PyMappingMethods.mp_ass_subscript`" -msgstr "" +msgstr ":c:member:`~PyMappingMethods.mp_ass_subscript`" #: ../../c-api/typeobj.rst:304 ../../c-api/typeobj.rst:463 msgid ":c:type:`objobjargproc`" -msgstr "" +msgstr ":c:type:`objobjargproc`" #: ../../c-api/typeobj.rst:304 msgid "__setitem__, __delitem__" -msgstr "" +msgstr "__setitem__, __delitem__" #: ../../c-api/typeobj.rst:309 msgid ":c:member:`~PySequenceMethods.sq_length`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_length`" #: ../../c-api/typeobj.rst:311 msgid ":c:member:`~PySequenceMethods.sq_concat`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_concat`" #: ../../c-api/typeobj.rst:311 msgid "__add__" -msgstr "" +msgstr "__add__" #: ../../c-api/typeobj.rst:313 msgid ":c:member:`~PySequenceMethods.sq_repeat`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_repeat`" #: ../../c-api/typeobj.rst:313 ../../c-api/typeobj.rst:315 #: ../../c-api/typeobj.rst:324 ../../c-api/typeobj.rst:447 msgid ":c:type:`ssizeargfunc`" -msgstr "" +msgstr ":c:type:`ssizeargfunc`" #: ../../c-api/typeobj.rst:313 msgid "__mul__" -msgstr "" +msgstr "__mul__" #: ../../c-api/typeobj.rst:315 msgid ":c:member:`~PySequenceMethods.sq_item`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_item`" #: ../../c-api/typeobj.rst:317 msgid ":c:member:`~PySequenceMethods.sq_ass_item`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_ass_item`" #: ../../c-api/typeobj.rst:317 ../../c-api/typeobj.rst:452 msgid ":c:type:`ssizeobjargproc`" -msgstr "" +msgstr ":c:type:`ssizeobjargproc`" #: ../../c-api/typeobj.rst:317 msgid "__setitem__ __delitem__" -msgstr "" +msgstr "__setitem__ __delitem__" #: ../../c-api/typeobj.rst:320 msgid ":c:member:`~PySequenceMethods.sq_contains`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_contains`" #: ../../c-api/typeobj.rst:320 ../../c-api/typeobj.rst:458 msgid ":c:type:`objobjproc`" -msgstr "" +msgstr ":c:type:`objobjproc`" #: ../../c-api/typeobj.rst:320 msgid "__contains__" -msgstr "" +msgstr "__contains__" #: ../../c-api/typeobj.rst:322 msgid ":c:member:`~PySequenceMethods.sq_inplace_concat`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_inplace_concat`" #: ../../c-api/typeobj.rst:324 msgid ":c:member:`~PySequenceMethods.sq_inplace_repeat`" -msgstr "" +msgstr ":c:member:`~PySequenceMethods.sq_inplace_repeat`" #: ../../c-api/typeobj.rst:328 msgid ":c:member:`~PyBufferProcs.bf_getbuffer`" -msgstr "" +msgstr ":c:member:`~PyBufferProcs.bf_getbuffer`" #: ../../c-api/typeobj.rst:328 msgid ":c:func:`getbufferproc`" -msgstr "" +msgstr ":c:func:`getbufferproc`" #: ../../c-api/typeobj.rst:328 msgid "__buffer__" -msgstr "" +msgstr "__buffer__" #: ../../c-api/typeobj.rst:330 msgid ":c:member:`~PyBufferProcs.bf_releasebuffer`" -msgstr "" +msgstr ":c:member:`~PyBufferProcs.bf_releasebuffer`" #: ../../c-api/typeobj.rst:330 msgid ":c:func:`releasebufferproc`" -msgstr "" +msgstr ":c:func:`releasebufferproc`" #: ../../c-api/typeobj.rst:330 msgid "__release_ buffer\\__" -msgstr "" +msgstr "__release_ buffer\\__" #: ../../c-api/typeobj.rst:337 msgid "slot typedefs" -msgstr "" +msgstr "Slot-Typedefs" #: ../../c-api/typeobj.rst:340 msgid "typedef" -msgstr "" +msgstr "typedef" #: ../../c-api/typeobj.rst:340 msgid "Parameter Types" -msgstr "" +msgstr "Parametertypen" #: ../../c-api/typeobj.rst:340 msgid "Return Type" -msgstr "" +msgstr "Rückgabetyp" #: ../../c-api/typeobj.rst:347 ../../c-api/typeobj.rst:349 #: ../../c-api/typeobj.rst:425 msgid "void" -msgstr "" +msgstr "void" #: ../../c-api/typeobj.rst:352 msgid ":c:type:`visitproc`" -msgstr "" +msgstr ":c:type:`visitproc`" #: ../../c-api/typeobj.rst:351 ../../c-api/typeobj.rst:363 #: ../../c-api/typeobj.rst:376 ../../c-api/typeobj.rst:387 @@ -1172,31 +1206,31 @@ msgstr "" #: ../../c-api/typeobj.rst:430 ../../c-api/typeobj.rst:452 #: ../../c-api/typeobj.rst:458 ../../c-api/typeobj.rst:463 msgid "int" -msgstr "" +msgstr "int" #: ../../c-api/typeobj.rst:405 msgid "Py_hash_t" -msgstr "" +msgstr "Py_hash_t" #: ../../c-api/typeobj.rst:419 msgid ":c:type:`getbufferproc`" -msgstr "" +msgstr ":c:type:`getbufferproc`" #: ../../c-api/typeobj.rst:420 ../../c-api/typeobj.rst:426 msgid ":c:type:`Py_buffer` *" -msgstr "" +msgstr ":c:type:`Py_buffer` *" #: ../../c-api/typeobj.rst:425 msgid ":c:type:`releasebufferproc`" -msgstr "" +msgstr ":c:type:`releasebufferproc`" #: ../../c-api/typeobj.rst:470 msgid "See :ref:`slot-typedefs` below for more detail." -msgstr "" +msgstr "Mehr dazu steht unten unter :ref:`slot-typedefs`." #: ../../c-api/typeobj.rst:474 msgid "PyTypeObject Definition" -msgstr "" +msgstr "Definition von PyTypeObject" #: ../../c-api/typeobj.rst:476 msgid "" @@ -1204,6 +1238,8 @@ msgid "" "in :file:`Include/cpython/object.h`. For convenience of reference, this " "repeats the definition found there:" msgstr "" +"Die Strukturdefinition für :c:type:`PyTypeObject` steht in :file:`Include/" +"cpython/object.h`. Der Bequemlichkeit halber ist sie hier wiederholt:" #: ../../c-api/typeobj.rst:482 msgid "" @@ -1303,10 +1339,105 @@ msgid "" " uint16_t tp_versions_used;\n" "} PyTypeObject;\n" msgstr "" +"typedef struct _typeobject {\n" +" PyObject_VAR_HEAD\n" +" const char *tp_name; /* For printing, in format \".\" */\n" +" Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */\n" +"\n" +" /* Methods to implement standard operations */\n" +"\n" +" destructor tp_dealloc;\n" +" Py_ssize_t tp_vectorcall_offset;\n" +" getattrfunc tp_getattr;\n" +" setattrfunc tp_setattr;\n" +" PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)\n" +" or tp_reserved (Python 3) */\n" +" reprfunc tp_repr;\n" +"\n" +" /* Method suites for standard classes */\n" +"\n" +" PyNumberMethods *tp_as_number;\n" +" PySequenceMethods *tp_as_sequence;\n" +" PyMappingMethods *tp_as_mapping;\n" +"\n" +" /* More standard operations (here for binary compatibility) */\n" +"\n" +" hashfunc tp_hash;\n" +" ternaryfunc tp_call;\n" +" reprfunc tp_str;\n" +" getattrofunc tp_getattro;\n" +" setattrofunc tp_setattro;\n" +"\n" +" /* Functions to access object as input/output buffer */\n" +" PyBufferProcs *tp_as_buffer;\n" +"\n" +" /* Flags to define presence of optional/expanded features */\n" +" unsigned long tp_flags;\n" +"\n" +" const char *tp_doc; /* Documentation string */\n" +"\n" +" /* Assigned meaning in release 2.0 */\n" +" /* call function for all accessible objects */\n" +" traverseproc tp_traverse;\n" +"\n" +" /* delete references to contained objects */\n" +" inquiry tp_clear;\n" +"\n" +" /* Assigned meaning in release 2.1 */\n" +" /* rich comparisons */\n" +" richcmpfunc tp_richcompare;\n" +"\n" +" /* weak reference enabler */\n" +" Py_ssize_t tp_weaklistoffset;\n" +"\n" +" /* Iterators */\n" +" getiterfunc tp_iter;\n" +" iternextfunc tp_iternext;\n" +"\n" +" /* Attribute descriptor and subclassing stuff */\n" +" PyMethodDef *tp_methods;\n" +" PyMemberDef *tp_members;\n" +" PyGetSetDef *tp_getset;\n" +" // Strong reference on a heap type, borrowed reference on a static type\n" +" PyTypeObject *tp_base;\n" +" PyObject *tp_dict;\n" +" descrgetfunc tp_descr_get;\n" +" descrsetfunc tp_descr_set;\n" +" Py_ssize_t tp_dictoffset;\n" +" initproc tp_init;\n" +" allocfunc tp_alloc;\n" +" newfunc tp_new;\n" +" freefunc tp_free; /* Low-level free-memory routine */\n" +" inquiry tp_is_gc; /* For PyObject_IS_GC */\n" +" PyObject *tp_bases;\n" +" PyObject *tp_mro; /* method resolution order */\n" +" PyObject *tp_cache; /* no longer used */\n" +" void *tp_subclasses; /* for static builtin types this is an index */\n" +" PyObject *tp_weaklist; /* not used for static builtin types */\n" +" destructor tp_del;\n" +"\n" +" /* Type attribute cache version tag. Added in version 2.6.\n" +" * If zero, the cache is invalid and must be initialized.\n" +" */\n" +" unsigned int tp_version_tag;\n" +"\n" +" destructor tp_finalize;\n" +" vectorcallfunc tp_vectorcall;\n" +"\n" +" /* bitset of which type-watchers care about this type */\n" +" unsigned char tp_watched;\n" +"\n" +" /* Number of tp_version_tag values used.\n" +" * Set to _Py_ATTR_CACHE_UNUSED if the attribute cache is\n" +" * disabled for this type (e.g. due to custom MRO entries).\n" +" * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere).\n" +" */\n" +" uint16_t tp_versions_used;\n" +"} PyTypeObject;\n" #: ../../c-api/typeobj.rst:487 msgid "PyObject Slots" -msgstr "" +msgstr "PyObject-Slots" #: ../../c-api/typeobj.rst:489 msgid "" @@ -1318,10 +1449,17 @@ msgid "" "instances (i.e. type objects) *must* have " "the :c:member:`~PyVarObject.ob_size` field." msgstr "" +"Die Struktur des Typobjekts erweitert die Struktur :c:type:`PyVarObject`. " +"Das Feld :c:member:`~PyVarObject.ob_size` wird für dynamische Typen " +"verwendet (erzeugt von :c:func:`!type_new`, üblicherweise aus einer class-" +"Anweisung heraus aufgerufen). Beachte, dass :c:data:`PyType_Type` (der " +"Metatyp) :c:member:`~PyTypeObject.tp_itemsize` initialisiert, was bedeutet, " +"dass seine Instanzen (also Typobjekte) das " +"Feld :c:member:`~PyVarObject.ob_size` haben *müssen*." #: ../../c-api/typeobj.rst:496 msgid ":c:member:`PyObject.ob_refcnt`" -msgstr "" +msgstr ":c:member:`PyObject.ob_refcnt`" #: ../../c-api/typeobj.rst:498 msgid "" @@ -1332,6 +1470,12 @@ msgid "" "as references. But for :ref:`dynamically allocated type objects `, the instances *do* count as references." msgstr "" +"Der Referenzzähler des Typobjekts wird vom Makro ``PyObject_HEAD_INIT`` auf " +"``1`` initialisiert. Beachte, dass bei :ref:`statisch angelegten Typobjekten " +"` die Instanzen des Typs (Objekte, " +"deren :c:member:`~PyObject.ob_type` auf den Typ zurückverweist) *nicht* als " +"Referenzen zählen. Bei :ref:`dynamisch angelegten Typobjekten ` " +"zählen die Instanzen dagegen *sehr wohl* als Referenzen." #: ../../c-api/typeobj.rst:505 ../../c-api/typeobj.rst:528 #: ../../c-api/typeobj.rst:544 ../../c-api/typeobj.rst:591 @@ -1367,16 +1511,16 @@ msgstr "" #: ../../c-api/typeobj.rst:2328 ../../c-api/typeobj.rst:2344 #: ../../c-api/typeobj.rst:2488 ../../c-api/typeobj.rst:2548 msgid "**Inheritance:**" -msgstr "" +msgstr "**Vererbung:**" #: ../../c-api/typeobj.rst:507 ../../c-api/typeobj.rst:546 #: ../../c-api/typeobj.rst:593 msgid "This field is not inherited by subtypes." -msgstr "" +msgstr "Dieses Feld wird nicht an Untertypen vererbt." #: ../../c-api/typeobj.rst:510 msgid ":c:member:`PyObject.ob_type`" -msgstr "" +msgstr ":c:member:`PyObject.ob_type`" #: ../../c-api/typeobj.rst:512 msgid "" @@ -1389,10 +1533,19 @@ msgid "" "explicitly at the start of the module's initialization function, before " "doing anything else. This is typically done like this::" msgstr "" +"Das ist der Typ des Typs, mit anderen Worten sein Metatyp. Er wird durch das " +"Argument des Makros ``PyObject_HEAD_INIT`` initialisiert, und sein Wert " +"sollte normalerweise ``&PyType_Type`` sein. Bei dynamisch ladbaren " +"Erweiterungsmodulen, die (zumindest) unter Windows verwendbar sein müssen, " +"beschwert sich der Compiler allerdings, dass das kein gültiger " +"Initialisierer sei. Deshalb ist es üblich, dem Makro ``PyObject_HEAD_INIT`` " +"``NULL`` zu übergeben und dieses Feld ausdrücklich am Anfang der " +"Initialisierungsfunktion des Moduls zu setzen, bevor irgendetwas anderes " +"geschieht. Üblicherweise sieht das so aus::" #: ../../c-api/typeobj.rst:521 msgid "Foo_Type.ob_type = &PyType_Type;" -msgstr "" +msgstr "Foo_Type.ob_type = &PyType_Type;" #: ../../c-api/typeobj.rst:523 msgid "" @@ -1402,6 +1555,11 @@ msgid "" "field of the base class. :c:func:`PyType_Ready` will not change this field " "if it is non-zero." msgstr "" +"Das sollte geschehen, bevor Instanzen des Typs erzeugt " +"werden. :c:func:`PyType_Ready` prüft, ob :c:member:`~PyObject.ob_type` " +"``NULL`` ist, und initialisiert es in diesem Fall mit dem " +"Feld :c:member:`~PyObject.ob_type` der Basisklasse. :c:func:`PyType_Ready` " +"ändert dieses Feld nicht, wenn es ungleich null ist." #: ../../c-api/typeobj.rst:530 ../../c-api/typeobj.rst:819 #: ../../c-api/typeobj.rst:946 ../../c-api/typeobj.rst:1046 @@ -1410,15 +1568,15 @@ msgstr "" #: ../../c-api/typeobj.rst:2047 ../../c-api/typeobj.rst:2122 #: ../../c-api/typeobj.rst:2248 ../../c-api/typeobj.rst:2490 msgid "This field is inherited by subtypes." -msgstr "" +msgstr "Dieses Feld wird an Untertypen vererbt." #: ../../c-api/typeobj.rst:534 msgid "PyVarObject Slots" -msgstr "" +msgstr "PyVarObject-Slots" #: ../../c-api/typeobj.rst:536 msgid ":c:member:`PyVarObject.ob_size`" -msgstr "" +msgstr ":c:member:`PyVarObject.ob_size`" #: ../../c-api/typeobj.rst:538 msgid "" @@ -1426,14 +1584,18 @@ msgid "" "initialized to zero. For :ref:`dynamically allocated type objects `, this field has a special internal meaning." msgstr "" +"Bei :ref:`statisch angelegten Typobjekten ` sollte das auf " +"null initialisiert werden. Bei :ref:`dynamisch angelegten Typobjekten ` hat dieses Feld eine besondere interne Bedeutung." #: ../../c-api/typeobj.rst:542 msgid "This field should be accessed using the :c:func:`Py_SIZE()` macro." msgstr "" +"Auf dieses Feld sollte über das Makro :c:func:`Py_SIZE()` zugegriffen werden." #: ../../c-api/typeobj.rst:550 msgid "PyTypeObject Slots" -msgstr "" +msgstr "PyTypeObject-Slots" #: ../../c-api/typeobj.rst:552 msgid "" @@ -1443,12 +1605,19 @@ msgid "" "on :c:data:`PyBaseObject_Type` and :c:data:`PyType_Type` effectively act as " "defaults.)" msgstr "" +"Zu jedem Slot gibt es einen Abschnitt, der die Vererbung beschreibt. " +"Kann :c:func:`PyType_Ready` einen Wert setzen, wenn das Feld auf ``NULL`` " +"gesetzt ist, gibt es außerdem einen Abschnitt „Vorgabe“. (Beachte, dass " +"viele Felder, die an :c:data:`PyBaseObject_Type` und :c:data:`PyType_Type` " +"gesetzt sind, praktisch wie Vorgaben wirken.)" #: ../../c-api/typeobj.rst:559 msgid "" "See :c:macro:`Py_tp_name` for the corresponding :c:member:`Slot ID " "`." msgstr "" +"Die zugehörige :c:member:`Slot-ID ` steht " +"unter :c:macro:`Py_tp_name`." #: ../../c-api/typeobj.rst:562 msgid "" @@ -1461,6 +1630,14 @@ msgid "" "subpackage :mod:`!Q` in package :mod:`!P` should have " "the :c:member:`~PyTypeObject.tp_name` initializer ``\"P.Q.M.T\"``." msgstr "" +"Zeiger auf eine NUL-terminierte Zeichenkette mit dem Namen des Typs. Bei " +"Typen, die als Modulglobale zugänglich sind, sollte die Zeichenkette der " +"vollständige Modulname sein, gefolgt von einem Punkt und dem Typnamen. Bei " +"integrierten Typen sollte es nur der Typname sein. Ist das Modul ein " +"Untermodul eines Pakets, gehört der vollständige Paketname zum vollständigen " +"Modulnamen. Ein Typ namens :class:`!T` zum Beispiel, der im Modul :mod:`!M` " +"im Unterpaket :mod:`!Q` im Paket :mod:`!P` definiert ist, sollte " +"den :c:member:`~PyTypeObject.tp_name`-Initialisierer ``\"P.Q.M.T\"`` haben." #: ../../c-api/typeobj.rst:570 msgid "" @@ -1468,6 +1645,9 @@ msgid "" "be the type name, and the module name explicitly stored in the type dict as " "the value for key ``'__module__'``." msgstr "" +"Bei :ref:`dynamisch angelegten Typobjekten ` sollte das nur der " +"Typname sein. Der Modulname wird ausdrücklich im Dictionary des Typs unter " +"dem Schlüssel ``'__module__'`` abgelegt." #: ../../c-api/typeobj.rst:575 msgid "" @@ -1476,6 +1656,10 @@ msgid "" "accessible as the :attr:`~type.__module__` attribute, and everything after " "the last dot is made accessible as the :attr:`~type.__name__` attribute." msgstr "" +"Bei :ref:`statisch angelegten Typobjekten ` sollte das Feld " +"*tp_name* einen Punkt enthalten. Alles vor dem letzten Punkt wird als " +"Attribut :attr:`~type.__module__` zugänglich gemacht, alles nach dem letzten " +"Punkt als Attribut :attr:`~type.__name__`." #: ../../c-api/typeobj.rst:581 msgid "" @@ -1486,6 +1670,13 @@ msgid "" "impossible to pickle. Additionally, it will not be listed in module " "documentations created with pydoc." msgstr "" +"Ist kein Punkt vorhanden, wird das gesamte " +"Feld :c:member:`~PyTypeObject.tp_name` als Attribut :attr:`~type.__name__` " +"zugänglich gemacht, und das Attribut :attr:`~type.__module__` ist " +"undefiniert (sofern es nicht wie oben beschrieben ausdrücklich im Dictionary " +"gesetzt wird). Das bedeutet, dass sich dein Typ nicht picklen lässt. " +"Außerdem wird er in Moduldokumentationen, die mit pydoc erzeugt werden, " +"nicht aufgeführt." #: ../../c-api/typeobj.rst:587 msgid "" @@ -1493,11 +1684,16 @@ msgid "" "in :c:func:`PyTypeObject` (other than " "potentially :c:member:`~PyTypeObject.tp_itemsize`)." msgstr "" +"Dieses Feld darf nicht ``NULL`` sein. Es ist das einzige erforderliche Feld " +"in :c:func:`PyTypeObject` (abgesehen möglicherweise " +"von :c:member:`~PyTypeObject.tp_itemsize`)." #: ../../c-api/typeobj.rst:599 msgid "" "These fields allow calculating the size in bytes of instances of the type." msgstr "" +"Über diese Felder lässt sich die Größe von Instanzen des Typs in Bytes " +"berechnen." #: ../../c-api/typeobj.rst:601 msgid "" @@ -1505,6 +1701,9 @@ msgid "" "and :c:macro:`Py_tp_itemsize` for the corresponding :c:member:`Slot IDs " "`." msgstr "" +"Die zugehörigen :c:member:`Slot-IDs ` stehen " +"unter :c:macro:`Py_tp_basicsize`, :c:macro:`Py_tp_extra_basicsize` " +"und :c:macro:`Py_tp_itemsize`." #: ../../c-api/typeobj.rst:605 msgid "" @@ -1515,6 +1714,12 @@ msgid "" "tp_basicsize`. (Exceptions to this rule can be made " "using :c:func:`PyUnstable_Object_GC_NewWithExtraData`.)" msgstr "" +"Es gibt zwei Arten von Typen: Typen mit Instanzen fester Länge haben ein " +"Feld :c:member:`!tp_itemsize` von null, Typen mit Instanzen veränderlicher " +"Länge ein Feld :c:member:`!tp_itemsize` ungleich null. Bei einem Typ mit " +"Instanzen fester Länge haben alle Instanzen dieselbe Größe, die " +"in :c:member:`!tp_basicsize` angegeben ist. (Ausnahmen von dieser Regel " +"lassen sich mit :c:func:`PyUnstable_Object_GC_NewWithExtraData` machen.)" #: ../../c-api/typeobj.rst:612 msgid "" @@ -1523,6 +1728,10 @@ msgid "" "is :c:member:`!tp_basicsize` plus N times :c:member:`!tp_itemsize`, where N " "is the \"length\" of the object." msgstr "" +"Bei einem Typ mit Instanzen veränderlicher Länge müssen die Instanzen ein " +"Feld :c:member:`~PyVarObject.ob_size` haben, und die Instanzgröße " +"ist :c:member:`!tp_basicsize` plus N mal :c:member:`!tp_itemsize`, wobei N " +"die „Länge“ des Objekts ist." #: ../../c-api/typeobj.rst:617 msgid "" @@ -1534,12 +1743,21 @@ msgid "" "underlying storage and its size should be accessed " "using :c:func:`PyLong_Export`." msgstr "" +"Funktionen wie :c:func:`PyObject_NewVar` nehmen den Wert von N als Argument " +"und legen ihn im Feld :c:member:`~PyVarObject.ob_size` der Instanz ab. " +"Beachte, dass das Feld :c:member:`~PyVarObject.ob_size` später für andere " +"Zwecke verwendet werden kann. :py:type:`int`-Instanzen zum Beispiel nutzen " +"die Bits von :c:member:`~PyVarObject.ob_size` auf eine von der " +"Implementierung festgelegte Weise. Auf den zugrunde liegenden Speicher und " +"seine Größe sollte über :c:func:`PyLong_Export` zugegriffen werden." #: ../../c-api/typeobj.rst:627 msgid "" "The :c:member:`~PyVarObject.ob_size` field should be accessed using " "the :c:func:`Py_SIZE()` and :c:func:`Py_SET_SIZE()` macros." msgstr "" +"Auf das Feld :c:member:`~PyVarObject.ob_size` sollte über die " +"Makros :c:func:`Py_SIZE()` und :c:func:`Py_SET_SIZE()` zugegriffen werden." #: ../../c-api/typeobj.rst:630 msgid "" @@ -1550,6 +1768,13 @@ msgid "" "with :py:type:`int`, avoid reading lists' :c:member:`!ob_size` directly. " "Call :c:func:`PyList_Size` instead.)" msgstr "" +"Umgekehrt bedeutet das Vorhandensein eines " +"Feldes :c:member:`~PyVarObject.ob_size` im Aufbau der Instanz nicht, dass " +"die Instanzstruktur veränderliche Länge hat. Der Typ :py:type:`list` zum " +"Beispiel hat Instanzen fester Länge, und diese Instanzen haben trotzdem ein " +"Feld :c:member:`~PyVarObject.ob_size`. (Wie bei :py:type:`int` solltest " +"du :c:member:`!ob_size` von Listen nicht unmittelbar auslesen. Rufe " +"stattdessen :c:func:`PyList_Size` auf.)" #: ../../c-api/typeobj.rst:637 msgid "" @@ -1557,6 +1782,9 @@ msgid "" "type's :c:member:`~PyTypeObject.tp_base`, plus any extra data needed by each " "instance." msgstr "" +":c:member:`!tp_basicsize` schließt den Platz ein, der für die Daten " +"des :c:member:`~PyTypeObject.tp_base` des Typs nötig ist, zuzüglich aller " +"zusätzlichen Daten, die jede Instanz braucht." #: ../../c-api/typeobj.rst:641 msgid "" @@ -1566,6 +1794,11 @@ msgid "" "words, :c:member:`!tp_basicsize` must be greater than or equal to the " "base's :c:member:`!tp_basicsize`." msgstr "" +"Der richtige Weg, :c:member:`!tp_basicsize` zu setzen, führt über den " +"``sizeof``-Operator auf der Struktur, mit der der Aufbau der Instanz " +"deklariert wird. Diese Struktur muss die Struktur einschließen, mit der der " +"Basistyp deklariert wird. Mit anderen Worten muss :c:member:`!tp_basicsize` " +"größer oder gleich dem :c:member:`!tp_basicsize` des Basistyps sein." #: ../../c-api/typeobj.rst:647 msgid "" @@ -1575,22 +1808,32 @@ msgid "" "usually defined by the macro :c:macro:`PyObject_HEAD` " "or :c:macro:`PyObject_VAR_HEAD`, respectively." msgstr "" +"Da jeder Typ ein Untertyp von :py:type:`object` ist, muss diese " +"Struktur :c:type:`PyObject` oder :c:type:`PyVarObject` einschließen (je " +"nachdem, ob :c:member:`~PyVarObject.ob_size` enthalten sein soll). " +"Üblicherweise werden diese über das Makro :c:macro:`PyObject_HEAD` " +"beziehungsweise :c:macro:`PyObject_VAR_HEAD` festgelegt." #: ../../c-api/typeobj.rst:653 msgid "" "The basic size does not include the GC header size, as that header is not " "part of :c:macro:`PyObject_HEAD`." msgstr "" +"Die Grundgröße schließt die Größe des GC-Kopfes nicht ein, weil dieser Kopf " +"nicht zu :c:macro:`PyObject_HEAD` gehört." #: ../../c-api/typeobj.rst:656 msgid "" "For cases where struct used to declare the base type is unknown, " "see :c:member:`PyType_Spec.basicsize` and :c:func:`PyType_FromMetaclass`." msgstr "" +"Für Fälle, in denen die Struktur zur Deklaration des Basistyps unbekannt " +"ist, siehe :c:member:`PyType_Spec.basicsize` " +"und :c:func:`PyType_FromMetaclass`." #: ../../c-api/typeobj.rst:659 msgid "Notes about alignment:" -msgstr "" +msgstr "Hinweise zur Ausrichtung:" #: ../../c-api/typeobj.rst:661 msgid "" @@ -1600,6 +1843,11 @@ msgid "" "when using compiler extensions like ``__attribute__((packed))``, it is up to " "you." msgstr "" +":c:member:`!tp_basicsize` muss ein Vielfaches von ``_Alignof(PyObject)`` " +"sein. Verwendest du wie empfohlen ``sizeof`` auf einer ``struct``, " +"die :c:macro:`PyObject_HEAD` einschließt, sorgt der Compiler dafür. " +"Verwendest du keine C-``struct`` oder Compiler-Erweiterungen wie " +"``__attribute__((packed))``, liegt es an dir." #: ../../c-api/typeobj.rst:666 msgid "" @@ -1608,6 +1856,11 @@ msgid "" "alignment. For example, if a type's variable part stores a ``double``, it is " "your responsibility that both fields are a multiple of ``_Alignof(double)``." msgstr "" +"Erfordern die veränderlichen Elemente eine bestimmte Ausrichtung, " +"müssen :c:member:`!tp_basicsize` und :c:member:`!tp_itemsize` jeweils ein " +"Vielfaches dieser Ausrichtung sein. Speichert der veränderliche Teil eines " +"Typs zum Beispiel ein ``double``, liegt es in deiner Verantwortung, dass " +"beide Felder ein Vielfaches von ``_Alignof(double)`` sind." #: ../../c-api/typeobj.rst:675 msgid "" @@ -1615,6 +1868,9 @@ msgid "" "set to zero, :c:func:`PyType_Ready` will copy the value from the base type, " "indicating that the instances do not need additional storage.)" msgstr "" +"Diese Felder werden von Untertypen einzeln vererbt. (Das heißt: Ist das Feld " +"auf null gesetzt, kopiert :c:func:`PyType_Ready` den Wert aus dem Basistyp, " +"was anzeigt, dass die Instanzen keinen zusätzlichen Speicher brauchen.)" #: ../../c-api/typeobj.rst:680 msgid "" @@ -1623,15 +1879,22 @@ msgid "" "different non-zero value in a subtype (though this depends on the " "implementation of the base type)." msgstr "" +"Hat der Basistyp ein :c:member:`~PyTypeObject.tp_itemsize` ungleich null, " +"ist es im Allgemeinen nicht gefahrlos " +"möglich, :c:member:`~PyTypeObject.tp_itemsize` in einem Untertyp auf einen " +"anderen Wert ungleich null zu setzen (das hängt allerdings von der Umsetzung " +"des Basistyps ab)." #: ../../c-api/typeobj.rst:689 msgid "" "A pointer to the instance destructor function. The function signature is::" msgstr "" +"Ein Zeiger auf die Destruktorfunktion der Instanz. Die Signatur der Funktion " +"lautet::" #: ../../c-api/typeobj.rst:691 msgid "void tp_dealloc(PyObject *self);" -msgstr "" +msgstr "void tp_dealloc(PyObject *self);" #: ../../c-api/typeobj.rst:693 msgid "" @@ -1640,6 +1903,11 @@ msgid "" "instance, and call the type's :c:member:`~PyTypeObject.tp_free` function to " "free the object itself." msgstr "" +"Die Destruktorfunktion sollte alle Referenzen entfernen, die die Instanz " +"besitzt (also zum Beispiel :c:func:`Py_CLEAR` aufrufen), alle Speicherpuffer " +"freigeben, die der Instanz gehören, und die " +"Funktion :c:member:`~PyTypeObject.tp_free` des Typs aufrufen, um das Objekt " +"selbst freizugeben." #: ../../c-api/typeobj.rst:698 msgid "" @@ -1649,6 +1917,11 @@ msgid "" "preexisting error indicator (the deallocation could have occurred while " "processing a different error):" msgstr "" +"Rufst du möglicherweise Funktionen auf, die den Fehlerindikator setzen " +"können, musst du :c:func:`PyErr_GetRaisedException` " +"und :c:func:`PyErr_SetRaisedException` verwenden, damit du einen bereits " +"vorhandenen Fehlerindikator nicht überschreibst (die Freigabe könnte während " +"der Behandlung eines anderen Fehlers erfolgt sein):" #: ../../c-api/typeobj.rst:703 msgid "" @@ -1661,6 +1934,14 @@ msgid "" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" +"static void\n" +"foo_dealloc(foo_object *self)\n" +"{\n" +" PyObject *et, *ev, *etb;\n" +" PyObject *exc = PyErr_GetRaisedException();\n" +" ...\n" +" PyErr_SetRaisedException(exc);\n" +"}" #: ../../c-api/typeobj.rst:714 msgid "" @@ -1668,10 +1949,14 @@ msgid "" "case it should call :c:func:`PyErr_FormatUnraisable` to log (and clear) an " "unraisable exception." msgstr "" +"Der Dealloc-Handler selbst darf keine Ausnahme auslösen. Stößt er auf einen " +"Fehlerfall, sollte er :c:func:`PyErr_FormatUnraisable` aufrufen, um eine " +"nicht auslösbare Ausnahme zu protokollieren (und zu löschen)." #: ../../c-api/typeobj.rst:718 msgid "No guarantees are made about when an object is destroyed, except:" msgstr "" +"Darüber, wann ein Objekt zerstört wird, werden keine Zusagen gemacht, außer:" #: ../../c-api/typeobj.rst:720 msgid "" @@ -1679,6 +1964,10 @@ msgid "" "reference to the object is deleted, unless its finalizer " "(:c:member:`~PyTypeObject.tp_finalize`) subsequently resurrects the object." msgstr "" +"Python zerstört ein Objekt sofort oder einige Zeit, nachdem die letzte " +"Referenz darauf gelöscht wurde, sofern nicht sein Finalisierer " +"(:c:member:`~PyTypeObject.tp_finalize`) das Objekt anschließend wieder " +"auferstehen lässt." #: ../../c-api/typeobj.rst:724 msgid "" @@ -1686,6 +1975,9 @@ msgid "" "(:c:member:`~PyTypeObject.tp_finalize`) or automatically cleared " "(:c:member:`~PyTypeObject.tp_clear`)." msgstr "" +"Ein Objekt wird nicht zerstört, während es automatisch finalisiert " +"(:c:member:`~PyTypeObject.tp_finalize`) oder automatisch geleert wird " +"(:c:member:`~PyTypeObject.tp_clear`)." #: ../../c-api/typeobj.rst:728 msgid "" @@ -1693,6 +1985,9 @@ msgid "" "when the new reference count is zero, but this may change in a future " "version." msgstr "" +"CPython zerstört ein Objekt derzeit unmittelbar aus :c:func:`Py_DECREF` " +"heraus, sobald der neue Referenzzähler null ist. Das kann sich in einer " +"künftigen Version ändern." #: ../../c-api/typeobj.rst:732 msgid "" @@ -1700,6 +1995,9 @@ msgid "" "beginning of :c:member:`!tp_dealloc` to guarantee that the object is always " "finalized before destruction." msgstr "" +"Es wird empfohlen, am Anfang von :c:member:`!" +"tp_dealloc` :c:func:`PyObject_CallFinalizerFromDealloc` aufzurufen, damit " +"das Objekt vor der Zerstörung in jedem Fall finalisiert ist." #: ../../c-api/typeobj.rst:736 msgid "" @@ -1707,6 +2005,10 @@ msgid "" "flag is set), the destructor should call :c:func:`PyObject_GC_UnTrack` " "before clearing any member fields." msgstr "" +"Unterstützt der Typ die Speicherbereinigung (das " +"Flag :c:macro:`Py_TPFLAGS_HAVE_GC` ist gesetzt), sollte der " +"Destruktor :c:func:`PyObject_GC_UnTrack` aufrufen, bevor er Member-Felder " +"leert." #: ../../c-api/typeobj.rst:740 msgid "" @@ -1715,6 +2017,10 @@ msgid "" "that the object is always cleared before destruction. Beware " "that :c:member:`!tp_clear` might have already been called." msgstr "" +"Es ist zulässig, :c:member:`~PyTypeObject.tp_clear` aus :c:member:`!" +"tp_dealloc` heraus aufzurufen, um doppelten Code zu vermeiden und " +"sicherzustellen, dass das Objekt vor der Zerstörung immer geleert ist. Sei " +"dir bewusst, dass :c:member:`!tp_clear` bereits aufgerufen worden sein kann." #: ../../c-api/typeobj.rst:745 msgid "" @@ -1723,6 +2029,10 @@ msgid "" "(via :c:func:`Py_DECREF`) after calling the type deallocator. See the " "example code below.::" msgstr "" +"Ist der Typ auf dem Heap angelegt (:c:macro:`Py_TPFLAGS_HEAPTYPE`), sollte " +"der Deallokator die gehaltene Referenz auf sein Typobjekt freigeben " +"(über :c:func:`Py_DECREF`), nachdem er den Deallokator des Typs aufgerufen " +"hat. Siehe den Beispielcode unten.::" #: ../../c-api/typeobj.rst:750 msgid "" @@ -1735,6 +2045,14 @@ msgid "" " Py_TYPE(self)->tp_free(self);\n" "}" msgstr "" +"static void\n" +"foo_dealloc(PyObject *op)\n" +"{\n" +" foo_object *self = (foo_object *) op;\n" +" PyObject_GC_UnTrack(self);\n" +" Py_CLEAR(self->ref);\n" +" Py_TYPE(self)->tp_free(self);\n" +"}" #: ../../c-api/typeobj.rst:759 msgid "" @@ -1743,10 +2061,14 @@ msgid "" "must be backed up first and restored later (after logging any exceptions " "with :c:func:`PyErr_WriteUnraisable`)." msgstr "" +":c:member:`!tp_dealloc` muss den Ausnahmezustand unverändert lassen. Muss es " +"etwas aufrufen, das eine Ausnahme auslösen könnte, ist der Ausnahmezustand " +"zuerst zu sichern und später wiederherzustellen (nachdem etwaige Ausnahmen " +"mit :c:func:`PyErr_WriteUnraisable` protokolliert wurden)." #: ../../c-api/typeobj.rst:764 msgid "Example::" -msgstr "" +msgstr "Beispiel::" #: ../../c-api/typeobj.rst:766 msgid "" @@ -1789,6 +2111,44 @@ msgid "" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" +"static void\n" +"foo_dealloc(PyObject *self)\n" +"{\n" +" PyObject *exc = PyErr_GetRaisedException();\n" +"\n" +" if (PyObject_CallFinalizerFromDealloc(self) < 0) {\n" +" // self was resurrected.\n" +" goto done;\n" +" }\n" +"\n" +" PyTypeObject *tp = Py_TYPE(self);\n" +"\n" +" if (tp->tp_flags & Py_TPFLAGS_HAVE_GC) {\n" +" PyObject_GC_UnTrack(self);\n" +" }\n" +"\n" +" // Optional, but convenient to avoid code duplication.\n" +" if (tp->tp_clear && tp->tp_clear(self) < 0) {\n" +" PyErr_WriteUnraisable(self);\n" +" }\n" +"\n" +" // Any additional destruction goes here.\n" +"\n" +" tp->tp_free(self);\n" +" self = NULL; // In case PyErr_WriteUnraisable() is called below.\n" +"\n" +" if (tp->tp_flags & Py_TPFLAGS_HEAPTYPE) {\n" +" Py_CLEAR(tp);\n" +" }\n" +"\n" +"done:\n" +" // Optional, if something was called that might have raised an\n" +" // exception.\n" +" if (PyErr_Occurred()) {\n" +" PyErr_WriteUnraisable(self);\n" +" }\n" +" PyErr_SetRaisedException(exc);\n" +"}" #: ../../c-api/typeobj.rst:805 msgid "" @@ -1802,12 +2162,24 @@ msgid "" "those objects on the thread which called :c:member:`!tp_dealloc` will not " "violate any assumptions of the library." msgstr "" +":c:member:`!tp_dealloc` darf aus jedem Python-Thread aufgerufen werden, " +"nicht nur aus dem, der das Objekt erzeugt hat (wird das Objekt Teil eines " +"Referenzzyklus, kann dieser Zyklus von einer Speicherbereinigung in einem " +"beliebigen Thread eingesammelt werden). Für Aufrufe der Python-API ist das " +"kein Problem, denn der Thread, auf dem :c:member:`!tp_dealloc` aufgerufen " +"wird, hat einen :term:`angehängten Thread-Zustand `. " +"Zerstört das zu zerstörende Objekt seinerseits Objekte aus einer anderen C-" +"Bibliothek, ist allerdings darauf zu achten, dass das Zerstören dieser " +"Objekte auf dem Thread, der :c:member:`!tp_dealloc` aufgerufen hat, keine " +"Annahmen dieser Bibliothek verletzt." #: ../../c-api/typeobj.rst:823 ../../c-api/typeobj.rst:1740 #: ../../c-api/typeobj.rst:2503 msgid "" ":ref:`life-cycle` for details about how this slot relates to other slots." msgstr "" +":ref:`life-cycle` -- Einzelheiten dazu, wie dieser Slot mit den anderen " +"Slots zusammenhängt." #: ../../c-api/typeobj.rst:828 msgid "" @@ -1815,6 +2187,9 @@ msgid "" "object using the :ref:`vectorcall protocol `, a more efficient " "alternative of the simpler :c:member:`~PyTypeObject.tp_call`." msgstr "" +"Ein wahlfreier Versatz zu einer Funktion je Instanz, die das Aufrufen des " +"Objekts über das :ref:`vectorcall-Protokoll ` umsetzt -- eine " +"wirksamere Alternative zum einfacheren :c:member:`~PyTypeObject.tp_call`." #: ../../c-api/typeobj.rst:833 msgid "" @@ -1822,6 +2197,10 @@ msgid "" "set. If so, this must be a positive integer containing the offset in the " "instance of a :c:type:`vectorcallfunc` pointer." msgstr "" +"Dieses Feld wird nur verwendet, wenn das " +"Flag :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` gesetzt ist. Ist es das, muss " +"dies eine positive ganze Zahl sein, die den Versatz " +"eines :c:type:`vectorcallfunc`-Zeigers in der Instanz enthält." #: ../../c-api/typeobj.rst:837 msgid "" @@ -1829,6 +2208,9 @@ msgid "" "behaves as if :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` was not set: calling the " "instance falls back to :c:member:`~PyTypeObject.tp_call`." msgstr "" +"Der *vectorcallfunc*-Zeiger darf ``NULL`` sein. Die Instanz verhält sich " +"dann so, als wäre :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` nicht gesetzt: Das " +"Aufrufen der Instanz fällt auf :c:member:`~PyTypeObject.tp_call` zurück." #: ../../c-api/typeobj.rst:841 msgid "" @@ -1837,12 +2219,18 @@ msgid "" "consistent with the *vectorcallfunc* function. This can be done by setting " "*tp_call* to :c:func:`PyVectorcall_Call`." msgstr "" +"Jede Klasse, die ``Py_TPFLAGS_HAVE_VECTORCALL`` setzt, muss " +"auch :c:member:`~PyTypeObject.tp_call` setzen und dafür sorgen, dass dessen " +"Verhalten zur *vectorcallfunc*-Funktion passt. Das lässt sich erreichen, " +"indem *tp_call* auf :c:func:`PyVectorcall_Call` gesetzt wird." #: ../../c-api/typeobj.rst:848 msgid "" "Before version 3.8, this slot was named ``tp_print``. In Python 2.x, it was " "used for printing to a file. In Python 3.0 to 3.7, it was unused." msgstr "" +"Vor Version 3.8 hieß dieser Slot ``tp_print``. In Python 2.x diente er der " +"Ausgabe in eine Datei. In Python 3.0 bis 3.7 war er unbenutzt." #: ../../c-api/typeobj.rst:854 msgid "" @@ -1853,6 +2241,13 @@ msgid "" "setting ``__call__`` will disable vectorcall optimization by clearing " "the :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` flag." msgstr "" +"Vor Version 3.12 war es nicht empfohlen, dass :ref:`veränderliche Heap-Typen " +"` das vectorcall-Protokoll umsetzen. Setzt " +"jemand :attr:`~object.__call__` in Python-Code, wird nur *tp_call* " +"aktualisiert, womit es wahrscheinlich nicht mehr zur vectorcall-Funktion " +"passt. Seit 3.12 schaltet das Setzen von ``__call__`` die vectorcall-" +"Optimierung ab, indem es das Flag :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` " +"löscht." #: ../../c-api/typeobj.rst:864 msgid "" @@ -1861,10 +2256,17 @@ msgid "" "it's not set, then the subclass won't use :ref:`vectorcall `, " "except when :c:func:`PyVectorcall_Call` is explicitly called." msgstr "" +"Dieses Feld wird immer vererbt. Das " +"Flag :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` wird allerdings nicht immer " +"vererbt. Ist es nicht gesetzt, verwendet die Unterklasse :ref:`vectorcall " +"` nicht, außer wenn :c:func:`PyVectorcall_Call` ausdrücklich " +"aufgerufen wird." #: ../../c-api/typeobj.rst:875 msgid "An optional pointer to the get-attribute-string function." msgstr "" +"Ein wahlfreier Zeiger auf die Funktion zum Lesen eines Attributs über eine " +"Zeichenkette." #: ../../c-api/typeobj.rst:877 msgid "" @@ -1873,10 +2275,14 @@ msgid "" "but taking a C string instead of a Python string object to give the " "attribute name." msgstr "" +"Dieses Feld ist veraltet. Ist es festgelegt, sollte es auf eine Funktion " +"zeigen, die sich genauso verhält wie die " +"Funktion :c:member:`~PyTypeObject.tp_getattro`, aber eine C-Zeichenkette " +"statt eines Python-Zeichenkettenobjekts für den Attributnamen nimmt." #: ../../c-api/typeobj.rst:883 ../../c-api/typeobj.rst:1091 msgid "Group: :c:member:`~PyTypeObject.tp_getattr`, :c:member:`~PyTypeObject.tp_getattro`" -msgstr "" +msgstr "Gruppe: :c:member:`~PyTypeObject.tp_getattr`, :c:member:`~PyTypeObject.tp_getattro`" #: ../../c-api/typeobj.rst:885 msgid "" @@ -1887,11 +2293,18 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_getattr` " "and :c:member:`~PyTypeObject.tp_getattro` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_getattro` vererbt: Ein Untertyp erbt " +"sowohl :c:member:`~PyTypeObject.tp_getattr` als " +"auch :c:member:`~PyTypeObject.tp_getattro` von seinem Basistyp, " +"wenn :c:member:`~PyTypeObject.tp_getattr` " +"und :c:member:`~PyTypeObject.tp_getattro` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:894 ../../c-api/typeobj.rst:1106 msgid "" "An optional pointer to the function for setting and deleting attributes." msgstr "" +"Ein wahlfreier Zeiger auf die Funktion zum Setzen und Löschen von Attributen." #: ../../c-api/typeobj.rst:896 msgid "" @@ -1900,10 +2313,14 @@ msgid "" "but taking a C string instead of a Python string object to give the " "attribute name." msgstr "" +"Dieses Feld ist veraltet. Ist es festgelegt, sollte es auf eine Funktion " +"zeigen, die sich genauso verhält wie die " +"Funktion :c:member:`~PyTypeObject.tp_setattro`, aber eine C-Zeichenkette " +"statt eines Python-Zeichenkettenobjekts für den Attributnamen nimmt." #: ../../c-api/typeobj.rst:902 ../../c-api/typeobj.rst:1119 msgid "Group: :c:member:`~PyTypeObject.tp_setattr`, :c:member:`~PyTypeObject.tp_setattro`" -msgstr "" +msgstr "Gruppe: :c:member:`~PyTypeObject.tp_setattr`, :c:member:`~PyTypeObject.tp_setattro`" #: ../../c-api/typeobj.rst:904 msgid "" @@ -1914,6 +2331,12 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_setattr` " "and :c:member:`~PyTypeObject.tp_setattro` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_setattro` vererbt: Ein Untertyp erbt " +"sowohl :c:member:`~PyTypeObject.tp_setattr` als " +"auch :c:member:`~PyTypeObject.tp_setattro` von seinem Basistyp, " +"wenn :c:member:`~PyTypeObject.tp_setattr` " +"und :c:member:`~PyTypeObject.tp_setattro` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:911 msgid "" @@ -1921,30 +2344,38 @@ msgid "" "objects which implement :term:`awaitable` and :term:`asynchronous iterator` " "protocols at the C-level. See :ref:`async-structs` for details." msgstr "" +"Zeiger auf eine zusätzliche Struktur mit Feldern, die nur für Objekte von " +"Bedeutung sind, die die Protokolle :term:`abwartbar ` " +"und :term:`asynchroner Iterator ` auf C-Ebene " +"umsetzen. Einzelheiten stehen unter :ref:`async-structs`." #: ../../c-api/typeobj.rst:915 msgid "Formerly known as ``tp_compare`` and ``tp_reserved``." -msgstr "" +msgstr "Früher bekannt als ``tp_compare`` und ``tp_reserved``." #: ../../c-api/typeobj.rst:920 msgid "" "The :c:member:`~PyTypeObject.tp_as_async` field is not inherited, but the " "contained fields are inherited individually." msgstr "" +"Das Feld :c:member:`~PyTypeObject.tp_as_async` wird nicht vererbt, die " +"enthaltenen Felder werden aber einzeln vererbt." #: ../../c-api/typeobj.rst:930 msgid "" "An optional pointer to a function that implements the built-in " "function :func:`repr`." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die die integrierte " +"Funktion :func:`repr` umsetzt." #: ../../c-api/typeobj.rst:933 msgid "The signature is the same as for :c:func:`PyObject_Repr`::" -msgstr "" +msgstr "Die Signatur ist dieselbe wie bei :c:func:`PyObject_Repr`::" #: ../../c-api/typeobj.rst:935 msgid "PyObject *tp_repr(PyObject *self);" -msgstr "" +msgstr "PyObject *tp_repr(PyObject *self);" #: ../../c-api/typeobj.rst:937 msgid "" @@ -1954,6 +2385,12 @@ msgid "" "feasible, it should return a string starting with ``'<'`` and ending with " "``'>'`` from which both the type and the value of the object can be deduced." msgstr "" +"Die Funktion muss eine Zeichenkette oder ein Unicode-Objekt zurückgeben. Im " +"Idealfall sollte sie eine Zeichenkette zurückgeben, die -- an :func:`eval` " +"übergeben und in einer passenden Umgebung -- ein Objekt mit demselben Wert " +"ergibt. Ist das nicht machbar, sollte sie eine Zeichenkette zurückgeben, die " +"mit ``'<'`` beginnt und mit ``'>'`` endet und aus der sich sowohl der Typ " +"als auch der Wert des Objekts ableiten lassen." #: ../../c-api/typeobj.rst:948 ../../c-api/typeobj.rst:1029 #: ../../c-api/typeobj.rst:1070 ../../c-api/typeobj.rst:1097 @@ -1964,7 +2401,7 @@ msgstr "" #: ../../c-api/typeobj.rst:2146 ../../c-api/typeobj.rst:2187 #: ../../c-api/typeobj.rst:2217 ../../c-api/typeobj.rst:2250 msgid "**Default:**" -msgstr "" +msgstr "**Vorgabe:**" #: ../../c-api/typeobj.rst:950 msgid "" @@ -1972,6 +2409,9 @@ msgid "" "returned, where ``%s`` is replaced by the type name, and ``%p`` by the " "object's memory address." msgstr "" +"Ist dieses Feld nicht gesetzt, wird eine Zeichenkette der Form ``<%s object " +"at %p>`` zurückgegeben, wobei ``%s`` durch den Typnamen und ``%p`` durch die " +"Speicheradresse des Objekts ersetzt wird." #: ../../c-api/typeobj.rst:957 msgid "" @@ -1979,12 +2419,17 @@ msgid "" "objects which implement the number protocol. These fields are documented " "in :ref:`number-structs`." msgstr "" +"Zeiger auf eine zusätzliche Struktur mit Feldern, die nur für Objekte von " +"Bedeutung sind, die das Zahlenprotokoll umsetzen. Diese Felder sind " +"unter :ref:`number-structs` dokumentiert." #: ../../c-api/typeobj.rst:963 msgid "" "The :c:member:`~PyTypeObject.tp_as_number` field is not inherited, but the " "contained fields are inherited individually." msgstr "" +"Das Feld :c:member:`~PyTypeObject.tp_as_number` wird nicht vererbt, die " +"enthaltenen Felder werden aber einzeln vererbt." #: ../../c-api/typeobj.rst:969 msgid "" @@ -1992,12 +2437,17 @@ msgid "" "objects which implement the sequence protocol. These fields are documented " "in :ref:`sequence-structs`." msgstr "" +"Zeiger auf eine zusätzliche Struktur mit Feldern, die nur für Objekte von " +"Bedeutung sind, die das Sequenzprotokoll umsetzen. Diese Felder sind " +"unter :ref:`sequence-structs` dokumentiert." #: ../../c-api/typeobj.rst:975 msgid "" "The :c:member:`~PyTypeObject.tp_as_sequence` field is not inherited, but the " "contained fields are inherited individually." msgstr "" +"Das Feld :c:member:`~PyTypeObject.tp_as_sequence` wird nicht vererbt, die " +"enthaltenen Felder werden aber einzeln vererbt." #: ../../c-api/typeobj.rst:981 msgid "" @@ -2005,26 +2455,33 @@ msgid "" "objects which implement the mapping protocol. These fields are documented " "in :ref:`mapping-structs`." msgstr "" +"Zeiger auf eine zusätzliche Struktur mit Feldern, die nur für Objekte von " +"Bedeutung sind, die das Mapping-Protokoll umsetzen. Diese Felder sind " +"unter :ref:`mapping-structs` dokumentiert." #: ../../c-api/typeobj.rst:987 msgid "" "The :c:member:`~PyTypeObject.tp_as_mapping` field is not inherited, but the " "contained fields are inherited individually." msgstr "" +"Das Feld :c:member:`~PyTypeObject.tp_as_mapping` wird nicht vererbt, die " +"enthaltenen Felder werden aber einzeln vererbt." #: ../../c-api/typeobj.rst:997 msgid "" "An optional pointer to a function that implements the built-in " "function :func:`hash`." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die die integrierte " +"Funktion :func:`hash` umsetzt." #: ../../c-api/typeobj.rst:1000 msgid "The signature is the same as for :c:func:`PyObject_Hash`::" -msgstr "" +msgstr "Die Signatur ist dieselbe wie bei :c:func:`PyObject_Hash`::" #: ../../c-api/typeobj.rst:1002 msgid "Py_hash_t tp_hash(PyObject *);" -msgstr "" +msgstr "Py_hash_t tp_hash(PyObject *);" #: ../../c-api/typeobj.rst:1004 msgid "" @@ -2032,6 +2489,9 @@ msgid "" "error occurs during the computation of the hash value, the function should " "set an exception and return ``-1``." msgstr "" +"Der Wert ``-1`` sollte nicht als gewöhnlicher Rückgabewert verwendet werden. " +"Tritt bei der Berechnung des Hash-Werts ein Fehler auf, sollte die Funktion " +"eine Ausnahme setzen und ``-1`` zurückgeben." #: ../../c-api/typeobj.rst:1008 msgid "" @@ -2040,6 +2500,10 @@ msgid "" "raises :exc:`TypeError`. This is the same as setting it " "to :c:func:`PyObject_HashNotImplemented`." msgstr "" +"Ist dieses Feld nicht gesetzt " +"(*und* :c:member:`~PyTypeObject.tp_richcompare` ebenfalls nicht), löst der " +"Versuch, den Hash des Objekts zu bilden, ein :exc:`TypeError` aus. Das " +"entspricht dem Setzen auf :c:func:`PyObject_HashNotImplemented`." #: ../../c-api/typeobj.rst:1012 msgid "" @@ -2051,10 +2515,18 @@ msgid "" "the Python level will result in the ``tp_hash`` slot being set " "to :c:func:`PyObject_HashNotImplemented`." msgstr "" +"Dieses Feld lässt sich ausdrücklich " +"auf :c:func:`PyObject_HashNotImplemented` setzen, um das Erben der hash-" +"Methode von einem übergeordneten Typ zu unterbinden. Das wird als " +"Entsprechung zu ``__hash__ = None`` auf Python-Ebene ausgelegt und führt " +"dazu, dass ``isinstance(o, collections.Hashable)`` richtigerweise ``False`` " +"zurückgibt. Beachte, dass auch die Umkehrung gilt: ``__hash__ = None`` auf " +"Python-Ebene an einer Klasse zu setzen führt dazu, dass der Slot ``tp_hash`` " +"auf :c:func:`PyObject_HashNotImplemented` gesetzt wird." #: ../../c-api/typeobj.rst:1022 ../../c-api/typeobj.rst:1798 msgid "Group: :c:member:`~PyTypeObject.tp_hash`, :c:member:`~PyTypeObject.tp_richcompare`" -msgstr "" +msgstr "Gruppe: :c:member:`~PyTypeObject.tp_hash`, :c:member:`~PyTypeObject.tp_richcompare`" #: ../../c-api/typeobj.rst:1024 msgid "" @@ -2065,10 +2537,16 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_richcompare` " "and :c:member:`~PyTypeObject.tp_hash` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_richcompare` vererbt: Ein Untertyp erbt " +"sowohl :c:member:`~PyTypeObject.tp_richcompare` als " +"auch :c:member:`~PyTypeObject.tp_hash`, " +"wenn :c:member:`~PyTypeObject.tp_richcompare` " +"und :c:member:`~PyTypeObject.tp_hash` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:1031 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericHash`." -msgstr "" +msgstr ":c:data:`PyBaseObject_Type` verwendet :c:func:`PyObject_GenericHash`." #: ../../c-api/typeobj.rst:1038 msgid "" @@ -2076,10 +2554,13 @@ msgid "" "should be ``NULL`` if the object is not callable. The signature is the same " "as for :c:func:`PyObject_Call`::" msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die das Aufrufen des Objekts " +"umsetzt. Ist das Objekt nicht aufrufbar, sollte dies ``NULL`` sein. Die " +"Signatur ist dieselbe wie bei :c:func:`PyObject_Call`::" #: ../../c-api/typeobj.rst:1042 msgid "PyObject *tp_call(PyObject *self, PyObject *args, PyObject *kwargs);" -msgstr "" +msgstr "PyObject *tp_call(PyObject *self, PyObject *args, PyObject *kwargs);" #: ../../c-api/typeobj.rst:1053 msgid "" @@ -2089,14 +2570,19 @@ msgid "" "calls :c:func:`PyObject_Str` to do the actual work, " "and :c:func:`PyObject_Str` will call this handler.)" msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die den integrierten " +"Vorgang :func:`str` umsetzt. (Beachte, dass :class:`str` inzwischen ein Typ " +"ist und :func:`str` den Konstruktor dieses Typs aufruft. Dieser Konstruktor " +"ruft :c:func:`PyObject_Str` auf, um die eigentliche Arbeit zu erledigen, " +"und :c:func:`PyObject_Str` ruft diesen Handler auf.)" #: ../../c-api/typeobj.rst:1058 msgid "The signature is the same as for :c:func:`PyObject_Str`::" -msgstr "" +msgstr "Die Signatur ist dieselbe wie bei :c:func:`PyObject_Str`::" #: ../../c-api/typeobj.rst:1060 msgid "PyObject *tp_str(PyObject *self);" -msgstr "" +msgstr "PyObject *tp_str(PyObject *self);" #: ../../c-api/typeobj.rst:1062 msgid "" @@ -2105,24 +2591,29 @@ msgid "" "representation that will be used, among other things, by the :func:`print` " "function." msgstr "" +"Die Funktion muss eine Zeichenkette oder ein Unicode-Objekt zurückgeben. Sie " +"sollte eine „freundliche“ Textdarstellung des Objekts sein, denn das ist die " +"Darstellung, die unter anderem die Funktion :func:`print` verwendet." #: ../../c-api/typeobj.rst:1072 msgid "" "When this field is not set, :c:func:`PyObject_Repr` is called to return a " "string representation." msgstr "" +"Ist dieses Feld nicht gesetzt, wird :c:func:`PyObject_Repr` aufgerufen, um " +"eine Textdarstellung zurückzugeben." #: ../../c-api/typeobj.rst:1080 msgid "An optional pointer to the get-attribute function." -msgstr "" +msgstr "Ein wahlfreier Zeiger auf die Funktion zum Lesen eines Attributs." #: ../../c-api/typeobj.rst:1082 msgid "The signature is the same as for :c:func:`PyObject_GetAttr`::" -msgstr "" +msgstr "Die Signatur ist dieselbe wie bei :c:func:`PyObject_GetAttr`::" #: ../../c-api/typeobj.rst:1084 msgid "PyObject *tp_getattro(PyObject *self, PyObject *attr);" -msgstr "" +msgstr "PyObject *tp_getattro(PyObject *self, PyObject *attr);" #: ../../c-api/typeobj.rst:1086 msgid "" @@ -2130,6 +2621,9 @@ msgid "" "to :c:func:`PyObject_GenericGetAttr`, which implements the normal way of " "looking for object attributes." msgstr "" +"Üblicherweise ist es praktisch, dieses Feld " +"auf :c:func:`PyObject_GenericGetAttr` zu setzen, was die gewöhnliche Art " +"umsetzt, Objektattribute nachzuschlagen." #: ../../c-api/typeobj.rst:1093 msgid "" @@ -2140,18 +2634,25 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_getattr` " "and :c:member:`~PyTypeObject.tp_getattro` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_getattr` vererbt: Ein Untertyp erbt " +"sowohl :c:member:`~PyTypeObject.tp_getattr` als " +"auch :c:member:`~PyTypeObject.tp_getattro` von seinem Basistyp, " +"wenn :c:member:`~PyTypeObject.tp_getattr` " +"und :c:member:`~PyTypeObject.tp_getattro` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:1099 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericGetAttr`." msgstr "" +":c:data:`PyBaseObject_Type` verwendet :c:func:`PyObject_GenericGetAttr`." #: ../../c-api/typeobj.rst:1108 msgid "The signature is the same as for :c:func:`PyObject_SetAttr`::" -msgstr "" +msgstr "Die Signatur ist dieselbe wie bei :c:func:`PyObject_SetAttr`::" #: ../../c-api/typeobj.rst:1110 msgid "int tp_setattro(PyObject *self, PyObject *attr, PyObject *value);" -msgstr "" +msgstr "int tp_setattro(PyObject *self, PyObject *attr, PyObject *value);" #: ../../c-api/typeobj.rst:1112 msgid "" @@ -2160,6 +2661,10 @@ msgid "" "to :c:func:`PyObject_GenericSetAttr`, which implements the normal way of " "setting object attributes." msgstr "" +"Außerdem muss unterstützt werden, dass *value* auf ``NULL`` gesetzt wird, um " +"ein Attribut zu löschen. Üblicherweise ist es praktisch, dieses Feld " +"auf :c:func:`PyObject_GenericSetAttr` zu setzen, was die gewöhnliche Art " +"umsetzt, Objektattribute zu setzen." #: ../../c-api/typeobj.rst:1121 msgid "" @@ -2170,10 +2675,17 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_setattr` " "and :c:member:`~PyTypeObject.tp_setattro` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_setattr` vererbt: Ein Untertyp erbt " +"sowohl :c:member:`~PyTypeObject.tp_setattr` als " +"auch :c:member:`~PyTypeObject.tp_setattro` von seinem Basistyp, " +"wenn :c:member:`~PyTypeObject.tp_setattr` " +"und :c:member:`~PyTypeObject.tp_setattro` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:1127 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericSetAttr`." msgstr "" +":c:data:`PyBaseObject_Type` verwendet :c:func:`PyObject_GenericSetAttr`." #: ../../c-api/typeobj.rst:1132 msgid "" @@ -2181,18 +2693,25 @@ msgid "" "objects which implement the buffer interface. These fields are documented " "in :ref:`buffer-structs`." msgstr "" +"Zeiger auf eine zusätzliche Struktur mit Feldern, die nur für Objekte von " +"Bedeutung sind, die die Puffer-Schnittstelle umsetzen. Diese Felder sind " +"unter :ref:`buffer-structs` dokumentiert." #: ../../c-api/typeobj.rst:1138 msgid "" "The :c:member:`~PyTypeObject.tp_as_buffer` field is not inherited, but the " "contained fields are inherited individually." msgstr "" +"Das Feld :c:member:`~PyTypeObject.tp_as_buffer` wird nicht vererbt, die " +"enthaltenen Felder werden aber einzeln vererbt." #: ../../c-api/typeobj.rst:1144 msgid "" "See :c:macro:`Py_tp_flags` for the corresponding :c:member:`Slot ID " "`." msgstr "" +"Die zugehörige :c:member:`Slot-ID ` steht " +"unter :c:macro:`Py_tp_flags`." #: ../../c-api/typeobj.rst:1147 msgid "" @@ -2205,6 +2724,15 @@ msgid "" "guards must not be accessed and must be considered to have a zero or " "``NULL`` value instead." msgstr "" +"Dieses Feld ist eine Bitmaske verschiedener Flags. Manche Flags zeigen " +"abweichendes Verhalten in bestimmten Situationen an, andere zeigen an, dass " +"bestimmte Felder im Typobjekt (oder in den " +"über :c:member:`~PyTypeObject.tp_as_number`, :c:member:`~PyTypeObject.tp_as_sequence`, :c:member:`~PyTypeObject.tp_as_mapping` " +"und :c:member:`~PyTypeObject.tp_as_buffer` referenzierten " +"Erweiterungsstrukturen), die früher nicht immer vorhanden waren, gültig " +"sind. Ist ein solches Flag-Bit nicht gesetzt, darf auf die Typfelder, die es " +"absichert, nicht zugegriffen werden. Sie sind stattdessen als null oder " +"``NULL`` zu betrachten." #: ../../c-api/typeobj.rst:1157 msgid "" @@ -2221,16 +2749,31 @@ msgid "" "and :c:member:`~PyTypeObject.tp_clear` fields in the subtype exist and have " "``NULL`` values." msgstr "" +"Die Vererbung dieses Feldes ist kompliziert. Die meisten Flag-Bits werden " +"einzeln vererbt, das heißt: Ist ein Flag-Bit im Basistyp gesetzt, erbt der " +"Untertyp dieses Flag-Bit. Die Flag-Bits, die Erweiterungsstrukturen " +"betreffen, werden streng dann vererbt, wenn die Erweiterungsstruktur vererbt " +"wird, das heißt: Der Wert des Flag-Bits im Basistyp wird zusammen mit einem " +"Zeiger auf die Erweiterungsstruktur in den Untertyp kopiert. Das Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` wird gemeinsam mit den " +"Feldern :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` vererbt, also dann, wenn das Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` im Untertyp nicht gesetzt ist und die " +"Felder :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` im Untertyp vorhanden sind und " +"``NULL``-Werte haben." #: ../../c-api/typeobj.rst:1172 msgid "" ":c:data:`PyBaseObject_Type` uses ``Py_TPFLAGS_DEFAULT | " "Py_TPFLAGS_BASETYPE``." msgstr "" +":c:data:`PyBaseObject_Type` verwendet ``Py_TPFLAGS_DEFAULT | " +"Py_TPFLAGS_BASETYPE``." #: ../../c-api/typeobj.rst:1175 msgid "**Bit Masks:**" -msgstr "" +msgstr "**Bitmasken:**" #: ../../c-api/typeobj.rst:1179 msgid "" @@ -2240,6 +2783,11 @@ msgid "" "macro :c:func:`PyType_HasFeature` takes a type and a flags value, *tp* and " "*f*, and checks whether ``tp->tp_flags & f`` is non-zero." msgstr "" +"Derzeit sind die folgenden Bitmasken festgelegt. Sie lassen sich über den " +"Operator ``|`` miteinander verodern, um den Wert des " +"Feldes :c:member:`~PyTypeObject.tp_flags` zu bilden. Das " +"Makro :c:func:`PyType_HasFeature` nimmt einen Typ und einen Flag-Wert, *tp* " +"und *f*, und prüft, ob ``tp->tp_flags & f`` ungleich null ist." #: ../../c-api/typeobj.rst:1186 msgid "" @@ -2253,12 +2801,22 @@ msgid "" "also :ref:`support garbage collection ` as they " "can form a reference cycle with their own module object." msgstr "" +"Dieses Bit ist gesetzt, wenn das Typobjekt selbst auf dem Heap angelegt ist, " +"zum Beispiel bei Typen, die dynamisch über :c:func:`PyType_FromSpec` erzeugt " +"werden. In diesem Fall gilt das Feld :c:member:`~PyObject.ob_type` seiner " +"Instanzen als Referenz auf den Typ, und das Typobjekt wird mit INCREF " +"versehen, wenn eine neue Instanz erzeugt wird, und mit DECREF, wenn eine " +"Instanz zerstört wird (das gilt nicht für Instanzen von Untertypen, sondern " +"nur für den Typ, auf den das ob_type der Instanz verweist, bekommt INCREF " +"oder DECREF). Heap-Typen sollten außerdem :ref:`die Speicherbereinigung " +"unterstützen `, da sie mit ihrem eigenen " +"Modulobjekt einen Referenzzyklus bilden können." #: ../../c-api/typeobj.rst:1197 ../../c-api/typeobj.rst:1208 #: ../../c-api/typeobj.rst:1218 ../../c-api/typeobj.rst:1228 #: ../../c-api/typeobj.rst:1260 msgid "???" -msgstr "" +msgstr "???" #: ../../c-api/typeobj.rst:1202 msgid "" @@ -2266,18 +2824,25 @@ msgid "" "If this bit is clear, the type cannot be subtyped (similar to a \"final\" " "class in Java)." msgstr "" +"Dieses Bit ist gesetzt, wenn der Typ als Basistyp eines anderen Typs " +"verwendet werden kann. Ist dieses Bit nicht gesetzt, lässt sich vom Typ " +"keine Unterklasse bilden (ähnlich einer „final“-Klasse in Java)." #: ../../c-api/typeobj.rst:1213 msgid "" "This bit is set when the type object has been fully initialized " "by :c:func:`PyType_Ready`." msgstr "" +"Dieses Bit ist gesetzt, wenn das Typobjekt von :c:func:`PyType_Ready` " +"vollständig initialisiert wurde." #: ../../c-api/typeobj.rst:1223 msgid "" "This bit is set while :c:func:`PyType_Ready` is in the process of " "initializing the type object." msgstr "" +"Dieses Bit ist gesetzt, während :c:func:`PyType_Ready` das Typobjekt gerade " +"initialisiert." #: ../../c-api/typeobj.rst:1233 msgid "" @@ -2288,11 +2853,17 @@ msgid "" "(see :c:member:`~PyTypeObject.tp_free`) using :c:func:`PyObject_GC_Del`. " "More information in section :ref:`supporting-cycle-detection`." msgstr "" +"Dieses Bit ist gesetzt, wenn das Objekt die Speicherbereinigung unterstützt. " +"Ist dieses Bit gesetzt, muss Speicher für neue Instanzen " +"(siehe :c:member:`~PyTypeObject.tp_alloc`) über :c:macro:`PyObject_GC_New` " +"oder :c:func:`PyType_GenericAlloc` angefordert und " +"(siehe :c:member:`~PyTypeObject.tp_free`) über :c:func:`PyObject_GC_Del` " +"freigegeben werden. Mehr dazu im Abschnitt :ref:`supporting-cycle-detection`." #: ../../c-api/typeobj.rst:1242 ../../c-api/typeobj.rst:1585 #: ../../c-api/typeobj.rst:1731 msgid "Group: :c:macro:`Py_TPFLAGS_HAVE_GC`, :c:member:`~PyTypeObject.tp_traverse`, :c:member:`~PyTypeObject.tp_clear`" -msgstr "" +msgstr "Gruppe: :c:macro:`Py_TPFLAGS_HAVE_GC`, :c:member:`~PyTypeObject.tp_traverse`, :c:member:`~PyTypeObject.tp_clear`" #: ../../c-api/typeobj.rst:1244 msgid "" @@ -2304,6 +2875,13 @@ msgid "" "and :c:member:`~PyTypeObject.tp_clear` fields in the subtype exist and have " "``NULL`` values." msgstr "" +"Das Flag-Bit :c:macro:`Py_TPFLAGS_HAVE_GC` wird gemeinsam mit den " +"Feldern :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` vererbt, also dann, wenn das Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` im Untertyp nicht gesetzt ist und die " +"Felder :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` im Untertyp vorhanden sind und " +"``NULL``-Werte haben." #: ../../c-api/typeobj.rst:1254 msgid "" @@ -2311,26 +2889,34 @@ msgid "" "fields in the type object and its extension structures. Currently, it " "includes the following bits: :c:macro:`Py_TPFLAGS_HAVE_STACKLESS_EXTENSION`." msgstr "" +"Das ist eine Bitmaske aller Bits, die das Vorhandensein bestimmter Felder im " +"Typobjekt und seinen Erweiterungsstrukturen betreffen. Derzeit umfasst sie " +"die folgenden Bits: :c:macro:`Py_TPFLAGS_HAVE_STACKLESS_EXTENSION`." #: ../../c-api/typeobj.rst:1265 msgid "This bit indicates that objects behave like unbound methods." msgstr "" +"Dieses Bit zeigt an, dass Objekte sich wie ungebundene Methoden verhalten." #: ../../c-api/typeobj.rst:1267 msgid "If this flag is set for ``type(meth)``, then:" -msgstr "" +msgstr "Ist dieses Flag für ``type(meth)`` gesetzt, gilt:" #: ../../c-api/typeobj.rst:1269 msgid "" "``meth.__get__(obj, cls)(*args, **kwds)`` (with ``obj`` not None) must be " "equivalent to ``meth(obj, *args, **kwds)``." msgstr "" +"``meth.__get__(obj, cls)(*args, **kwds)`` (mit ``obj`` nicht None) muss " +"gleichbedeutend sein mit ``meth(obj, *args, **kwds)``." #: ../../c-api/typeobj.rst:1272 msgid "" "``meth.__get__(None, cls)(*args, **kwds)`` must be equivalent to " "``meth(*args, **kwds)``." msgstr "" +"``meth.__get__(None, cls)(*args, **kwds)`` muss gleichbedeutend sein mit " +"``meth(*args, **kwds)``." #: ../../c-api/typeobj.rst:1275 msgid "" @@ -2338,6 +2924,9 @@ msgid "" "``obj.meth()``: it avoids creating a temporary \"bound method\" object for " "``obj.meth``." msgstr "" +"Dieses Flag ermöglicht eine Optimierung für typische Methodenaufrufe wie " +"``obj.meth()``: Es vermeidet, für ``obj.meth`` ein vorübergehendes Objekt " +"für die „gebundene Methode“ zu erzeugen." #: ../../c-api/typeobj.rst:1283 msgid "" @@ -2345,6 +2934,10 @@ msgid "" "the :c:macro:`Py_TPFLAGS_IMMUTABLETYPE` flag set. For extension types, it " "is inherited whenever :c:member:`~PyTypeObject.tp_descr_get` is inherited." msgstr "" +"Dieses Flag wird nie an Typen vererbt, bei denen das " +"Flag :c:macro:`Py_TPFLAGS_IMMUTABLETYPE` nicht gesetzt ist. Bei " +"Erweiterungstypen wird es immer dann vererbt, " +"wenn :c:member:`~PyTypeObject.tp_descr_get` vererbt wird." #: ../../c-api/typeobj.rst:1289 msgid "" @@ -2352,34 +2945,49 @@ msgid "" "a :attr:`~object.__dict__` attribute, and that the space for the dictionary " "is managed by the VM." msgstr "" +"Dieses Bit zeigt an, dass Instanzen der Klasse ein " +"Attribut :attr:`~object.__dict__` haben und dass die VM den Platz für das " +"Dictionary verwaltet." #: ../../c-api/typeobj.rst:1292 ../../c-api/typeobj.rst:1310 msgid "If this flag is set, :c:macro:`Py_TPFLAGS_HAVE_GC` must also be set." msgstr "" +"Ist dieses Flag gesetzt, muss auch :c:macro:`Py_TPFLAGS_HAVE_GC` gesetzt " +"sein." #: ../../c-api/typeobj.rst:1294 msgid "" "The type traverse function must call :c:func:`PyObject_VisitManagedDict` and " "its clear function must call :c:func:`PyObject_ClearManagedDict`." msgstr "" +"Die traverse-Funktion des Typs muss :c:func:`PyObject_VisitManagedDict` " +"aufrufen und seine clear-Funktion :c:func:`PyObject_ClearManagedDict`." #: ../../c-api/typeobj.rst:1301 msgid "" "This flag is inherited unless the :c:member:`~PyTypeObject.tp_dictoffset` " "field is set in a superclass." msgstr "" +"Dieses Flag wird vererbt, sofern das " +"Feld :c:member:`~PyTypeObject.tp_dictoffset` nicht in einer Oberklasse " +"gesetzt ist." #: ../../c-api/typeobj.rst:1307 msgid "" "This bit indicates that instances of the class should be weakly " "referenceable." msgstr "" +"Dieses Bit zeigt an, dass Instanzen der Klasse schwach referenzierbar sein " +"sollen." #: ../../c-api/typeobj.rst:1316 msgid "" "This flag is inherited unless " "the :c:member:`~PyTypeObject.tp_weaklistoffset` field is set in a superclass." msgstr "" +"Dieses Flag wird vererbt, sofern das " +"Feld :c:member:`~PyTypeObject.tp_weaklistoffset` nicht in einer Oberklasse " +"gesetzt ist." #: ../../c-api/typeobj.rst:1322 msgid "" @@ -2387,6 +2995,9 @@ msgid "" "before the object. Currently, this macro is equivalent " "to :c:expr:`Py_TPFLAGS_MANAGED_DICT | Py_TPFLAGS_MANAGED_WEAKREF`." msgstr "" +"Diese Bits zeigen an, dass die VM einige Felder verwaltet, indem sie sie vor " +"dem Objekt ablegt. Derzeit entspricht dieses " +"Makro :c:expr:`Py_TPFLAGS_MANAGED_DICT | Py_TPFLAGS_MANAGED_WEAKREF`." #: ../../c-api/typeobj.rst:1326 msgid "" @@ -2394,12 +3005,17 @@ msgid "" "stable and may change in a future version. Prefer using individual flags " "instead." msgstr "" +"Der Wert dieses Makros hängt von der Umsetzung der VM ab, er ist deshalb " +"nicht stabil und kann sich in einer künftigen Version ändern. Verwende " +"besser die einzelnen Flags." #: ../../c-api/typeobj.rst:1335 msgid "" "Only usable with variable-size types, i.e. ones with non-" "zero :c:member:`~PyTypeObject.tp_itemsize`." msgstr "" +"Nur bei Typen veränderlicher Größe verwendbar, also solchen mit " +"einem :c:member:`~PyTypeObject.tp_itemsize` ungleich null." #: ../../c-api/typeobj.rst:1338 msgid "" @@ -2407,16 +3023,22 @@ msgid "" "the end of the instance's memory area, at an offset of ``Py_TYPE(obj)-" ">tp_basicsize`` (which may be different in each subclass)." msgstr "" +"Zeigt an, dass der Teil veränderlicher Größe einer Instanz dieses Typs am " +"Ende des Speicherbereichs der Instanz liegt, beim Versatz ``Py_TYPE(obj)-" +">tp_basicsize`` (der in jeder Unterklasse anders sein kann)." #: ../../c-api/typeobj.rst:1343 msgid "" "When setting this flag, be sure that all superclasses either use this memory " "layout, or are not variable-sized. Python does not check this." msgstr "" +"Vergewissere dich beim Setzen dieses Flags, dass alle Oberklassen entweder " +"denselben Speicheraufbau verwenden oder nicht von veränderlicher Größe sind. " +"Python prüft das nicht." #: ../../c-api/typeobj.rst:1351 msgid "This flag is inherited." -msgstr "" +msgstr "Dieses Flag wird vererbt." #: ../../c-api/typeobj.rst:1365 msgid "" @@ -2429,12 +3051,22 @@ msgid "" "interacts with such types will behave differently depending on what kind of " "check is used." msgstr "" +"Funktionen wie :c:func:`PyLong_Check` rufen :c:func:`PyType_FastSubclass` " +"mit einem dieser Flags auf, um schnell festzustellen, ob ein Typ eine " +"Unterklasse eines integrierten Typs ist. Solche gezielten Prüfungen sind " +"schneller als eine allgemeine Prüfung wie :c:func:`PyObject_IsInstance`. Bei " +"eigenen Typen, die von integrierten Typen erben, " +"sollte :c:member:`~PyTypeObject.tp_flags` passend gesetzt sein, sonst " +"verhält sich der Code, der mit solchen Typen umgeht, je nach verwendeter " +"Prüfung unterschiedlich." #: ../../c-api/typeobj.rst:1376 msgid "" "This bit is set when the :c:member:`~PyTypeObject.tp_finalize` slot is " "present in the type structure." msgstr "" +"Dieses Bit ist gesetzt, wenn der Slot :c:member:`~PyTypeObject.tp_finalize` " +"in der Typstruktur vorhanden ist." #: ../../c-api/typeobj.rst:1381 msgid "" @@ -2442,6 +3074,9 @@ msgid "" "the :c:member:`~PyTypeObject.tp_finalize` slot is always present in the type " "structure." msgstr "" +"Dieses Flag ist nicht mehr nötig, weil der Interpreter davon ausgeht, dass " +"der Slot :c:member:`~PyTypeObject.tp_finalize` in der Typstruktur immer " +"vorhanden ist." #: ../../c-api/typeobj.rst:1392 msgid "" @@ -2449,48 +3084,61 @@ msgid "" "`. See :c:member:`~PyTypeObject.tp_vectorcall_offset` for " "details." msgstr "" +"Dieses Bit ist gesetzt, wenn die Klasse das :ref:`vectorcall-Protokoll " +"` umsetzt. Einzelheiten stehen " +"unter :c:member:`~PyTypeObject.tp_vectorcall_offset`." #: ../../c-api/typeobj.rst:1398 msgid "" "This bit is inherited if :c:member:`~PyTypeObject.tp_call` is also inherited." msgstr "" +"Dieses Bit wird vererbt, wenn auch :c:member:`~PyTypeObject.tp_call` vererbt " +"wird." #: ../../c-api/typeobj.rst:1401 msgid "as ``_Py_TPFLAGS_HAVE_VECTORCALL``" -msgstr "" +msgstr "als ``_Py_TPFLAGS_HAVE_VECTORCALL``" #: ../../c-api/typeobj.rst:1405 msgid "" "Renamed to the current name, without the leading underscore. The old " "provisional name is :term:`soft deprecated`." msgstr "" +"Auf den jetzigen Namen umbenannt, ohne den führenden Unterstrich. Der alte " +"vorläufige Name ist :term:`sanft abgekündigt `." #: ../../c-api/typeobj.rst:1410 msgid "" "This flag is now removed from a class when the " "class's :py:meth:`~object.__call__` method is reassigned." msgstr "" +"Dieses Flag wird jetzt von einer Klasse entfernt, wenn die " +"Methode :py:meth:`~object.__call__` der Klasse neu zugewiesen wird." #: ../../c-api/typeobj.rst:1413 msgid "This flag can now be inherited by mutable classes." -msgstr "" +msgstr "Dieses Flag kann jetzt von veränderlichen Klassen geerbt werden." #: ../../c-api/typeobj.rst:1417 msgid "" "This bit is set for type objects that are immutable: type attributes cannot " "be set nor deleted." msgstr "" +"Dieses Bit ist bei Typobjekten gesetzt, die unveränderlich sind: " +"Typattribute lassen sich weder setzen noch löschen." #: ../../c-api/typeobj.rst:1419 msgid "" ":c:func:`PyType_Ready` automatically applies this flag to :ref:`static types " "`." msgstr "" +":c:func:`PyType_Ready` setzt dieses Flag bei :ref:`statischen Typen ` automatisch." #: ../../c-api/typeobj.rst:1424 ../../c-api/typeobj.rst:1533 #: ../../c-api/typeobj.rst:1545 msgid "This flag is not inherited." -msgstr "" +msgstr "Dieses Flag wird nicht vererbt." #: ../../c-api/typeobj.rst:1430 msgid "" @@ -2498,12 +3146,18 @@ msgid "" "set :c:member:`~PyTypeObject.tp_new` to NULL and don't create the " "``__new__`` key in the type dictionary." msgstr "" +"Verbietet das Erzeugen von Instanzen des Typs: Es " +"setzt :c:member:`~PyTypeObject.tp_new` auf NULL und legt den Schlüssel " +"``__new__`` im Dictionary des Typs nicht an." #: ../../c-api/typeobj.rst:1434 msgid "" "The flag must be set before creating the type, not after. For example, it " "must be set before :c:func:`PyType_Ready` is called on the type." msgstr "" +"Das Flag muss gesetzt werden, bevor der Typ erzeugt wird, nicht danach. Es " +"muss zum Beispiel gesetzt sein, bevor :c:func:`PyType_Ready` auf dem Typ " +"aufgerufen wird." #: ../../c-api/typeobj.rst:1437 msgid "" @@ -2511,6 +3165,9 @@ msgid "" "if :c:member:`~PyTypeObject.tp_base` is NULL or ``&PyBaseObject_Type`` " "and :c:member:`~PyTypeObject.tp_new` is NULL." msgstr "" +"Bei :ref:`statischen Typen ` wird das Flag automatisch " +"gesetzt, wenn :c:member:`~PyTypeObject.tp_base` NULL oder " +"``&PyBaseObject_Type`` ist und :c:member:`~PyTypeObject.tp_new` NULL ist." #: ../../c-api/typeobj.rst:1443 msgid "" @@ -2518,6 +3175,9 @@ msgid "" "unless they provide a non-NULL :c:member:`~PyTypeObject.tp_new` (which is " "only possible via the C API)." msgstr "" +"Dieses Flag wird nicht vererbt. Unterklassen lassen sich allerdings nur dann " +"instanziieren, wenn sie ein :c:member:`~PyTypeObject.tp_new` ungleich NULL " +"bereitstellen (was nur über die C-API möglich ist)." #: ../../c-api/typeobj.rst:1450 msgid "" @@ -2525,6 +3185,11 @@ msgid "" "subclasses (e.g. for an :term:`abstract base class`), do not use this flag. " "Instead, make :c:member:`~PyTypeObject.tp_new` only succeed for subclasses." msgstr "" +"Um das unmittelbare Instanziieren einer Klasse zu verbieten, das " +"Instanziieren ihrer Unterklassen aber zu erlauben (etwa bei " +"einer :term:`abstrakten Basisklasse `), verwende dieses " +"Flag nicht. Lass stattdessen :c:member:`~PyTypeObject.tp_new` nur bei " +"Unterklassen gelingen." #: ../../c-api/typeobj.rst:1461 msgid "" @@ -2533,22 +3198,31 @@ msgid "" "set when registering or subclassing :class:`collections.abc.Mapping`, and " "unset when registering :class:`collections.abc.Sequence`." msgstr "" +"Dieses Bit zeigt an, dass Instanzen der Klasse auf Mapping-Muster passen " +"können, wenn sie als Gegenstand eines :keyword:`match`-Blocks verwendet " +"werden. Es wird beim Registrieren oder Ableiten " +"von :class:`collections.abc.Mapping` automatisch gesetzt und beim " +"Registrieren von :class:`collections.abc.Sequence` gelöscht." #: ../../c-api/typeobj.rst:1468 ../../c-api/typeobj.rst:1490 msgid "" ":c:macro:`Py_TPFLAGS_MAPPING` and :c:macro:`Py_TPFLAGS_SEQUENCE` are " "mutually exclusive; it is an error to enable both flags simultaneously." msgstr "" +":c:macro:`Py_TPFLAGS_MAPPING` und :c:macro:`Py_TPFLAGS_SEQUENCE` schließen " +"einander aus. Beide Flags gleichzeitig einzuschalten ist ein Fehler." #: ../../c-api/typeobj.rst:1473 msgid "" "This flag is inherited by types that do not already " "set :c:macro:`Py_TPFLAGS_SEQUENCE`." msgstr "" +"Dieses Flag wird an Typen vererbt, die nicht " +"bereits :c:macro:`Py_TPFLAGS_SEQUENCE` setzen." #: ../../c-api/typeobj.rst:1476 ../../c-api/typeobj.rst:1498 msgid ":pep:`634` -- Structural Pattern Matching: Specification" -msgstr "" +msgstr ":pep:`634` -- Structural Pattern Matching: Specification" #: ../../c-api/typeobj.rst:1483 msgid "" @@ -2557,24 +3231,35 @@ msgid "" "set when registering or subclassing :class:`collections.abc.Sequence`, and " "unset when registering :class:`collections.abc.Mapping`." msgstr "" +"Dieses Bit zeigt an, dass Instanzen der Klasse auf Sequenzmuster passen " +"können, wenn sie als Gegenstand eines :keyword:`match`-Blocks verwendet " +"werden. Es wird beim Registrieren oder Ableiten " +"von :class:`collections.abc.Sequence` automatisch gesetzt und beim " +"Registrieren von :class:`collections.abc.Mapping` gelöscht." #: ../../c-api/typeobj.rst:1495 msgid "" "This flag is inherited by types that do not already " "set :c:macro:`Py_TPFLAGS_MAPPING`." msgstr "" +"Dieses Flag wird an Typen vererbt, die nicht " +"bereits :c:macro:`Py_TPFLAGS_MAPPING` setzen." #: ../../c-api/typeobj.rst:1505 msgid "" "Internal. Do not set or unset this flag. To indicate that a class has " "changed call :c:func:`PyType_Modified`" msgstr "" +"Intern. Setze oder lösche dieses Flag nicht. Um anzuzeigen, dass eine Klasse " +"sich geändert hat, rufe :c:func:`PyType_Modified` auf." #: ../../c-api/typeobj.rst:1509 msgid "" "This flag is present in header files, but is not be used. It will be removed " "in a future version of CPython" msgstr "" +"Dieses Flag ist in Header-Dateien vorhanden, wird aber nicht verwendet. Es " +"wird in einer künftigen Version von CPython entfernt." #: ../../c-api/typeobj.rst:1515 msgid "" @@ -2582,6 +3267,9 @@ msgid "" "the :c:member:`~PyTypeObject.tp_version_tag` field was available and " "initialized." msgstr "" +"Dieses Makro tut nichts. Früher zeigte es an, dass das " +"Feld :c:member:`~PyTypeObject.tp_version_tag` verfügbar und initialisiert " +"war." #: ../../c-api/typeobj.rst:1525 msgid "" @@ -2589,32 +3277,41 @@ msgid "" "values\" array (containing the object's attributes) placed directly after " "the end of the object." msgstr "" +"Dieses Bit zeigt an, dass Instanzen dieses Typs ein Array mit „Inline-" +"Werten“ haben (das die Attribute des Objekts enthält), das unmittelbar " +"hinter dem Ende des Objekts liegt." #: ../../c-api/typeobj.rst:1529 msgid "This requires that :c:macro:`Py_TPFLAGS_HAVE_GC` is set." -msgstr "" +msgstr "Das setzt voraus, dass :c:macro:`Py_TPFLAGS_HAVE_GC` gesetzt ist." #: ../../c-api/typeobj.rst:1540 msgid "" "This bit indicates that this is an abstract type and therefore cannot be " "instantiated." msgstr "" +"Dieses Bit zeigt an, dass dies ein abstrakter Typ ist und sich deshalb nicht " +"instanziieren lässt." #: ../../c-api/typeobj.rst:1548 msgid ":mod:`abc`" -msgstr "" +msgstr ":mod:`abc`" #: ../../c-api/typeobj.rst:1553 msgid "" "Internal. Do not set or unset this flag. Historically, this was a reserved " "flag for use in Stackless Python." msgstr "" +"Intern. Setze oder lösche dieses Flag nicht. Früher war das ein reserviertes " +"Flag zur Verwendung in Stackless Python." #: ../../c-api/typeobj.rst:1557 msgid "" "This flag is present in header files, but is not be used. This may be " "removed in a future version of CPython." msgstr "" +"Dieses Flag ist in Header-Dateien vorhanden, wird aber nicht verwendet. Es " +"wird möglicherweise in einer künftigen Version von CPython entfernt." #: ../../c-api/typeobj.rst:1565 msgid "" @@ -2622,20 +3319,26 @@ msgid "" "this type object. This is exposed as the :attr:`~type.__doc__` attribute on " "the type and instances of the type." msgstr "" +"Ein wahlfreier Zeiger auf eine NUL-terminierte C-Zeichenkette mit dem " +"Docstring für dieses Typobjekt. Er wird als Attribut :attr:`~type.__doc__` " +"am Typ und an den Instanzen des Typs nach außen gegeben." #: ../../c-api/typeobj.rst:1571 msgid "This field is *not* inherited by subtypes." -msgstr "" +msgstr "Dieses Feld wird *nicht* an Untertypen vererbt." #: ../../c-api/typeobj.rst:1578 msgid "" "An optional pointer to a traversal function for the garbage collector. This " "is only used if the :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit is set." msgstr "" +"Ein wahlfreier Zeiger auf eine traverse-Funktion für die " +"Speicherbereinigung. Sie wird nur verwendet, wenn das Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` gesetzt ist." #: ../../c-api/typeobj.rst:1581 msgid "See :ref:`gc-traversal` for documentation." -msgstr "" +msgstr "Die Dokumentation dazu steht unter :ref:`gc-traversal`." #: ../../c-api/typeobj.rst:1587 msgid "" @@ -2646,14 +3349,20 @@ msgid "" "and :c:member:`~PyTypeObject.tp_clear` are all inherited from the base type " "if they are all zero in the subtype." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_clear` und dem Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` vererbt: Das Flag-" +"Bit, :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` werden alle vom Basistyp geerbt, wenn " +"sie im Untertyp alle null sind." #: ../../c-api/typeobj.rst:1597 msgid "An optional pointer to a clear function. The signature is::" -msgstr "" +msgstr "Ein wahlfreier Zeiger auf eine clear-Funktion. Die Signatur lautet::" #: ../../c-api/typeobj.rst:1599 msgid "int tp_clear(PyObject *);" -msgstr "" +msgstr "int tp_clear(PyObject *);" #: ../../c-api/typeobj.rst:1601 msgid "" @@ -2662,6 +3371,11 @@ msgid "" "cleared object is a partially destroyed object; the object is not obligated " "to satisfy design invariants held during normal use." msgstr "" +"Der Zweck dieser Funktion ist es, Referenzzyklen aufzubrechen, die " +"ein :term:`zyklisches Isolat ` verursachen, damit die " +"Objekte gefahrlos zerstört werden können. Ein geleertes Objekt ist ein " +"teilweise zerstörtes Objekt. Es ist nicht verpflichtet, die " +"Entwurfsinvarianten einzuhalten, die im gewöhnlichen Betrieb gelten." #: ../../c-api/typeobj.rst:1606 msgid "" @@ -2673,12 +3387,22 @@ msgid "" "that :c:member:`!tp_clear` might have already been called. Prefer calling " "idempotent functions like :c:func:`Py_CLEAR`.)" msgstr "" +":c:member:`!tp_clear` muss keine Referenzen auf Objekte löschen, die nicht " +"an Referenzzyklen teilnehmen können, etwa Python-Zeichenketten oder ganze " +"Zahlen. Es kann aber bequem sein, alle Referenzen zu leeren und die " +"Funktion :c:member:`~PyTypeObject.tp_dealloc` des Typs so zu schreiben, dass " +"sie :c:member:`!tp_clear` aufruft, um doppelten Code zu vermeiden. (Sei dir " +"bewusst, dass :c:member:`!tp_clear` bereits aufgerufen worden sein kann. " +"Rufe besser idempotente Funktionen wie :c:func:`Py_CLEAR` auf.)" #: ../../c-api/typeobj.rst:1614 msgid "" "Any non-trivial cleanup should be performed " "in :c:member:`~PyTypeObject.tp_finalize` instead of :c:member:`!tp_clear`." msgstr "" +"Jedes nicht triviale Aufräumen sollte " +"in :c:member:`~PyTypeObject.tp_finalize` erfolgen statt in :c:member:`!" +"tp_clear`." #: ../../c-api/typeobj.rst:1619 msgid "" @@ -2686,30 +3410,44 @@ msgid "" "in the :term:`cyclic isolate` may remain indefinitely uncollectable " "(\"leak\"). See :data:`gc.garbage`." msgstr "" +"Gelingt es :c:member:`!tp_clear` nicht, einen Referenzzyklus aufzubrechen, " +"bleiben die Objekte im :term:`zyklischen Isolat ` " +"möglicherweise auf Dauer nicht einsammelbar („Leck“). " +"Siehe :data:`gc.garbage`." #: ../../c-api/typeobj.rst:1625 msgid "" "Referents (direct and indirect) might have already been cleared; they are " "not guaranteed to be in a consistent state." msgstr "" +"Referenzierte Objekte (unmittelbar und mittelbar) können bereits geleert " +"worden sein. Dass sie in einem widerspruchsfreien Zustand sind, ist nicht " +"zugesichert." #: ../../c-api/typeobj.rst:1630 msgid "" "The :c:member:`~PyTypeObject.tp_clear` function can be called from any " "thread." msgstr "" +"Die Funktion :c:member:`~PyTypeObject.tp_clear` darf aus jedem Thread " +"aufgerufen werden." #: ../../c-api/typeobj.rst:1635 msgid "" "An object is not guaranteed to be automatically cleared before its " "destructor (:c:member:`~PyTypeObject.tp_dealloc`) is called." msgstr "" +"Dass ein Objekt automatisch geleert wird, bevor sein Destruktor " +"(:c:member:`~PyTypeObject.tp_dealloc`) aufgerufen wird, ist nicht " +"zugesichert." #: ../../c-api/typeobj.rst:1638 msgid "" "This function differs from the destructor " "(:c:member:`~PyTypeObject.tp_dealloc`) in the following ways:" msgstr "" +"Diese Funktion unterscheidet sich vom Destruktor " +"(:c:member:`~PyTypeObject.tp_dealloc`) in folgender Hinsicht:" #: ../../c-api/typeobj.rst:1641 msgid "" @@ -2720,6 +3458,12 @@ msgid "" "(e.g., integers) as well as the object's own memory (by " "calling :c:member:`~PyTypeObject.tp_free`)." msgstr "" +"Der Zweck des Leerens eines Objekts ist es, Referenzen auf andere Objekte zu " +"entfernen, die an einem Referenzzyklus teilnehmen könnten. Der Zweck des " +"Destruktors ist dagegen umfassender: Er muss *alle* Ressourcen freigeben, " +"die ihm gehören, auch Referenzen auf Objekte, die an keinem Referenzzyklus " +"teilnehmen können (etwa ganze Zahlen), sowie den Speicher des Objekts selbst " +"(durch Aufruf von :c:member:`~PyTypeObject.tp_free`)." #: ../../c-api/typeobj.rst:1647 msgid "" @@ -2730,6 +3474,12 @@ msgid "" "only called when no (strong) references exist, and as such, must safely " "destroy the object itself by deallocating it." msgstr "" +"Wenn :c:member:`!tp_clear` aufgerufen wird, halten andere Objekte " +"möglicherweise noch Referenzen auf das zu leerende Objekt. Deshalb " +"darf :c:member:`!tp_clear` den Speicher des Objekts selbst nicht freigeben " +"(:c:member:`~PyTypeObject.tp_free`). Der Destruktor wird dagegen erst " +"aufgerufen, wenn keine (starken) Referenzen mehr bestehen, und muss das " +"Objekt deshalb gefahrlos zerstören, indem er es freigibt." #: ../../c-api/typeobj.rst:1653 msgid "" @@ -2738,12 +3488,19 @@ msgid "" "the object becomes unreachable (i.e., either there are no references to the " "object or the object is a member of a :term:`cyclic isolate`)." msgstr "" +":c:member:`!tp_clear` wird möglicherweise nie automatisch aufgerufen. Der " +"Destruktor eines Objekts wird dagegen einige Zeit, nachdem das Objekt " +"unerreichbar geworden ist, automatisch aufgerufen (also wenn entweder keine " +"Referenzen mehr auf das Objekt bestehen oder das Objekt Teil " +"eines :term:`zyklischen Isolats ` ist)." #: ../../c-api/typeobj.rst:1658 msgid "" "No guarantees are made about when, if, or how often Python automatically " "clears an object, except:" msgstr "" +"Darüber, wann, ob und wie oft Python ein Objekt automatisch leert, werden " +"keine Zusagen gemacht, außer:" #: ../../c-api/typeobj.rst:1661 msgid "" @@ -2751,6 +3508,9 @@ msgid "" "there is a reference to it and it is not a member of a :term:`cyclic " "isolate`." msgstr "" +"Python leert ein Objekt nicht automatisch, wenn es erreichbar ist, also wenn " +"eine Referenz darauf besteht und es nicht Teil eines :term:`zyklischen " +"Isolats ` ist." #: ../../c-api/typeobj.rst:1664 msgid "" @@ -2759,6 +3519,11 @@ msgid "" "the finalizer resurrected the object, the object may or may not be " "automatically finalized again before it is cleared.)" msgstr "" +"Python leert ein Objekt nicht automatisch, wenn es nicht automatisch " +"finalisiert wurde (siehe :c:member:`~PyTypeObject.tp_finalize`). (Hat der " +"Finalisierer das Objekt wieder auferstehen lassen, kann es sein, dass das " +"Objekt vor dem Leeren noch einmal automatisch finalisiert wird oder auch " +"nicht.)" #: ../../c-api/typeobj.rst:1668 msgid "" @@ -2766,6 +3531,9 @@ msgid "" "automatically clear it if any member of the cyclic isolate has not yet been " "automatically finalized (:c:member:`~PyTypeObject.tp_finalize`)." msgstr "" +"Ist ein Objekt Teil eines :term:`zyklischen Isolats `, leert " +"Python es nicht automatisch, solange noch ein Mitglied des Isolats nicht " +"automatisch finalisiert wurde (:c:member:`~PyTypeObject.tp_finalize`)." #: ../../c-api/typeobj.rst:1671 msgid "" @@ -2774,12 +3542,18 @@ msgid "" "of breaking a reference cycle does not invalidate the ``self`` pointer " "while :c:member:`!tp_clear` is still executing." msgstr "" +"Python zerstört ein Objekt erst, nachdem alle automatischen Aufrufe seiner " +"Funktion :c:member:`!tp_clear` zurückgekehrt sind. Damit ist sichergestellt, " +"dass das Aufbrechen eines Referenzzyklus den Zeiger ``self`` nicht ungültig " +"macht, während :c:member:`!tp_clear` noch läuft." #: ../../c-api/typeobj.rst:1675 msgid "" "Python will not automatically call :c:member:`!tp_clear` multiple times " "concurrently." msgstr "" +"Python ruft :c:member:`!tp_clear` nicht automatisch mehrfach gleichzeitig " +"auf." #: ../../c-api/typeobj.rst:1678 msgid "" @@ -2787,6 +3561,10 @@ msgid "" "reference cycles in a :term:`cyclic isolate`, but future versions might " "clear objects regularly before their destruction." msgstr "" +"CPython leert derzeit nur die Objekte automatisch, die nötig sind, um " +"Referenzzyklen in einem :term:`zyklischen Isolat ` " +"aufzubrechen. Künftige Versionen könnten Objekte aber regelmäßig vor ihrer " +"Zerstörung leeren." #: ../../c-api/typeobj.rst:1682 msgid "" @@ -2801,6 +3579,17 @@ msgid "" "immediately obvious, and there's rarely a good reason to avoid " "implementing :c:member:`~PyTypeObject.tp_clear`." msgstr "" +"Zusammengenommen müssen alle Funktionen :c:member:`~PyTypeObject.tp_clear` " +"im System gemeinsam alle Referenzzyklen aufbrechen. Das ist feinsinnig, und " +"im Zweifel stellst du besser eine " +"Funktion :c:member:`~PyTypeObject.tp_clear` bereit. Der Typ tuple zum " +"Beispiel setzt keine Funktion :c:member:`~PyTypeObject.tp_clear` um, weil " +"sich beweisen lässt, dass kein Referenzzyklus ausschließlich aus Tupeln " +"bestehen kann. Deshalb sind die " +"Funktionen :c:member:`~PyTypeObject.tp_clear` anderer Typen dafür zuständig, " +"jeden Zyklus aufzubrechen, der ein Tupel enthält. Das ist nicht sofort " +"offensichtlich, und es gibt selten einen guten " +"Grund, :c:member:`~PyTypeObject.tp_clear` nicht umzusetzen." #: ../../c-api/typeobj.rst:1693 msgid "" @@ -2809,6 +3598,10 @@ msgid "" "and set its pointers to those members to ``NULL``, as in the following " "example::" msgstr "" +"Umsetzungen von :c:member:`~PyTypeObject.tp_clear` sollten die Referenzen " +"der Instanz auf diejenigen ihrer Member fallen lassen, die Python-Objekte " +"sein können, und ihre Zeiger auf diese Member auf ``NULL`` setzen, wie im " +"folgenden Beispiel::" #: ../../c-api/typeobj.rst:1697 msgid "" @@ -2823,6 +3616,16 @@ msgid "" " return 0;\n" "}" msgstr "" +"static int\n" +"local_clear(PyObject *op)\n" +"{\n" +" localobject *self = (localobject *) op;\n" +" Py_CLEAR(self->key);\n" +" Py_CLEAR(self->args);\n" +" Py_CLEAR(self->kw);\n" +" Py_CLEAR(self->dict);\n" +" return 0;\n" +"}" #: ../../c-api/typeobj.rst:1708 msgid "" @@ -2838,6 +3641,18 @@ msgid "" "contained object can no longer be used. The :c:func:`Py_CLEAR` macro " "performs the operations in a safe order." msgstr "" +"Das Makro :c:func:`Py_CLEAR` sollte verwendet werden, weil das Leeren von " +"Referenzen heikel ist: Die Referenz auf das enthaltene Objekt darf erst dann " +"freigegeben werden (über :c:func:`Py_DECREF`), nachdem der Zeiger auf das " +"enthaltene Objekt auf ``NULL`` gesetzt wurde. Denn das Freigeben der " +"Referenz kann dazu führen, dass das enthaltene Objekt zu Müll wird, was eine " +"Kette von Aufräumvorgängen anstößt, die auch das Ausführen beliebigen Python-" +"Codes umfassen kann (durch Finalisierer oder Weakref-Callbacks des " +"enthaltenen Objekts). Kann solcher Code *self* erneut referenzieren, ist es " +"wichtig, dass der Zeiger auf das enthaltene Objekt zu diesem Zeitpunkt " +"``NULL`` ist, damit *self* weiß, dass das enthaltene Objekt nicht mehr " +"verwendet werden kann. Das Makro :c:func:`Py_CLEAR` führt die Schritte in " +"einer sicheren Reihenfolge aus." #: ../../c-api/typeobj.rst:1720 msgid "" @@ -2845,16 +3660,21 @@ msgid "" "the :c:member:`~PyTypeObject.tp_flags` field, the clear function must " "call :c:func:`PyObject_ClearManagedDict` like this::" msgstr "" +"Ist das Bit :c:macro:`Py_TPFLAGS_MANAGED_DICT` im " +"Feld :c:member:`~PyTypeObject.tp_flags` gesetzt, muss die clear-" +"Funktion :c:func:`PyObject_ClearManagedDict` so aufrufen::" #: ../../c-api/typeobj.rst:1724 msgid "PyObject_ClearManagedDict((PyObject*)self);" -msgstr "" +msgstr "PyObject_ClearManagedDict((PyObject*)self);" #: ../../c-api/typeobj.rst:1726 msgid "" "More information about Python's garbage collection scheme can be found in " "section :ref:`supporting-cycle-detection`." msgstr "" +"Mehr Informationen zum Verfahren der Speicherbereinigung in Python stehen im " +"Abschnitt :ref:`supporting-cycle-detection`." #: ../../c-api/typeobj.rst:1733 msgid "" @@ -2865,21 +3685,31 @@ msgid "" "and :c:member:`~PyTypeObject.tp_clear` are all inherited from the base type " "if they are all zero in the subtype." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_traverse` und dem Flag-" +"Bit :c:macro:`Py_TPFLAGS_HAVE_GC` vererbt: Das Flag-" +"Bit, :c:member:`~PyTypeObject.tp_traverse` " +"und :c:member:`~PyTypeObject.tp_clear` werden alle vom Basistyp geerbt, wenn " +"sie im Untertyp alle null sind." #: ../../c-api/typeobj.rst:1747 msgid "" "An optional pointer to the rich comparison function, whose signature is::" msgstr "" +"Ein wahlfreier Zeiger auf die Funktion für den erweiterten Vergleich, deren " +"Signatur lautet::" #: ../../c-api/typeobj.rst:1749 msgid "PyObject *tp_richcompare(PyObject *self, PyObject *other, int op);" -msgstr "" +msgstr "PyObject *tp_richcompare(PyObject *self, PyObject *other, int op);" #: ../../c-api/typeobj.rst:1751 msgid "" "The first parameter is guaranteed to be an instance of the type that is " "defined by :c:type:`PyTypeObject`." msgstr "" +"Der erste Parameter ist garantiert eine Instanz des Typs, der " +"durch :c:type:`PyTypeObject` festgelegt ist." #: ../../c-api/typeobj.rst:1754 msgid "" @@ -2888,6 +3718,10 @@ msgid "" "``Py_NotImplemented``, if another error occurred it must return ``NULL`` and " "set an exception condition." msgstr "" +"Die Funktion sollte das Ergebnis des Vergleichs zurückgeben (üblicherweise " +"``Py_True`` oder ``Py_False``). Ist der Vergleich undefiniert, muss sie " +"``Py_NotImplemented`` zurückgeben. Trat ein anderer Fehler auf, muss sie " +"``NULL`` zurückgeben und einen Ausnahmezustand setzen." #: ../../c-api/typeobj.rst:1759 msgid "" @@ -2895,14 +3729,17 @@ msgid "" "for :c:member:`~PyTypeObject.tp_richcompare` and " "for :c:func:`PyObject_RichCompare`:" msgstr "" +"Die folgenden Konstanten sind festgelegt, um als drittes Argument " +"für :c:member:`~PyTypeObject.tp_richcompare` und " +"für :c:func:`PyObject_RichCompare` verwendet zu werden:" #: ../../c-api/typeobj.rst:1765 msgid "Constant" -msgstr "" +msgstr "Konstante" #: ../../c-api/typeobj.rst:1765 msgid "Comparison" -msgstr "" +msgstr "Vergleich" #: ../../c-api/typeobj.rst:1767 msgid "``<``" @@ -2932,6 +3769,8 @@ msgstr "``>=``" msgid "" "The following macro is defined to ease writing rich comparison functions:" msgstr "" +"Das folgende Makro ist festgelegt, um das Schreiben von Funktionen für den " +"erweiterten Vergleich zu erleichtern:" #: ../../c-api/typeobj.rst:1784 msgid "" @@ -2940,14 +3779,23 @@ msgid "" "operators (for example, they may be C ints or floats). The third argument " "specifies the requested operation, as for :c:func:`PyObject_RichCompare`." msgstr "" +"Gibt je nach Ergebnis eines Vergleichs ``Py_True`` oder ``Py_False`` aus der " +"Funktion zurück. VAL_A und VAL_B müssen sich über die C-Vergleichsoperatoren " +"ordnen lassen (sie dürfen zum Beispiel C-ints oder -floats sein). Das dritte " +"Argument gibt den gewünschten Vorgang an, wie " +"bei :c:func:`PyObject_RichCompare`." #: ../../c-api/typeobj.rst:1790 msgid "The returned value is a new :term:`strong reference`." msgstr "" +"Der zurückgegebene Wert ist eine neue :term:`starke Referenz `." #: ../../c-api/typeobj.rst:1792 msgid "On error, sets an exception and returns ``NULL`` from the function." msgstr "" +"Im Fehlerfall setzt es eine Ausnahme und gibt ``NULL`` aus der Funktion " +"zurück." #: ../../c-api/typeobj.rst:1800 msgid "" @@ -2958,6 +3806,12 @@ msgid "" "subtype's :c:member:`~PyTypeObject.tp_richcompare` " "and :c:member:`~PyTypeObject.tp_hash` are both ``NULL``." msgstr "" +"Dieses Feld wird von Untertypen gemeinsam " +"mit :c:member:`~PyTypeObject.tp_hash` vererbt: Ein Untertyp " +"erbt :c:member:`~PyTypeObject.tp_richcompare` " +"und :c:member:`~PyTypeObject.tp_hash`, " +"wenn :c:member:`~PyTypeObject.tp_richcompare` " +"und :c:member:`~PyTypeObject.tp_hash` des Untertyps beide ``NULL`` sind." #: ../../c-api/typeobj.rst:1807 msgid "" @@ -2967,12 +3821,19 @@ msgid "" "not even the inherited function is used and instances of the type will not " "be able to participate in any comparisons." msgstr "" +":c:data:`PyBaseObject_Type` stellt eine Umsetzung " +"von :c:member:`~PyTypeObject.tp_richcompare` bereit, die geerbt werden kann. " +"Ist allerdings nur :c:member:`~PyTypeObject.tp_hash` festgelegt, wird nicht " +"einmal die geerbte Funktion verwendet, und Instanzen des Typs können an " +"keinerlei Vergleichen teilnehmen." #: ../../c-api/typeobj.rst:1816 msgid "" "While this field is still supported, :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` " "should be used instead, if at all possible." msgstr "" +"Dieses Feld wird zwar weiterhin unterstützt, aber nach Möglichkeit sollte " +"stattdessen :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` verwendet werden." #: ../../c-api/typeobj.rst:1819 msgid "" @@ -2983,18 +3844,28 @@ msgid "" "functions. The instance structure needs to include a field of " "type :c:expr:`PyObject*` which is initialized to ``NULL``." msgstr "" +"Sind die Instanzen dieses Typs schwach referenzierbar, ist dieses Feld " +"größer als null und enthält den Versatz des Kopfes der Liste schwacher " +"Referenzen in der Instanzstruktur (ohne den GC-Kopf, falls vorhanden). " +"Dieser Versatz wird von :c:func:`PyObject_ClearWeakRefs` und den " +"``PyWeakref_*``-Funktionen verwendet. Die Instanzstruktur muss ein Feld vom " +"Typ :c:expr:`PyObject*` enthalten, das auf ``NULL`` initialisiert wird." #: ../../c-api/typeobj.rst:1826 msgid "" "Do not confuse this field with :c:member:`~PyTypeObject.tp_weaklist`; that " "is the list head for weak references to the type object itself." msgstr "" +"Verwechsle dieses Feld nicht mit :c:member:`~PyTypeObject.tp_weaklist`. Das " +"ist der Listenkopf für schwache Referenzen auf das Typobjekt selbst." #: ../../c-api/typeobj.rst:1829 msgid "" "It is an error to set both the :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` bit " "and :c:member:`~PyTypeObject.tp_weaklistoffset`." msgstr "" +"Es ist ein Fehler, sowohl das Bit :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` als " +"auch :c:member:`~PyTypeObject.tp_weaklistoffset` zu setzen." #: ../../c-api/typeobj.rst:1834 msgid "" @@ -3004,6 +3875,12 @@ msgid "" "is always found via :c:member:`~PyTypeObject.tp_weaklistoffset`, this should " "not be a problem." msgstr "" +"Dieses Feld wird an Untertypen vererbt, siehe aber die unten aufgeführten " +"Regeln. Ein Untertyp darf diesen Versatz übergehen. Das bedeutet, dass der " +"Untertyp einen anderen Kopf der Liste schwacher Referenzen verwendet als der " +"Basistyp. Da der Listenkopf immer " +"über :c:member:`~PyTypeObject.tp_weaklistoffset` gefunden wird, sollte das " +"kein Problem sein." #: ../../c-api/typeobj.rst:1841 msgid "" @@ -3012,6 +3889,10 @@ msgid "" "then :c:member:`~PyTypeObject.tp_weaklistoffset` will be set to a negative " "value, to indicate that it is unsafe to use this field." msgstr "" +"Ist das Bit :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` im " +"Feld :c:member:`~PyTypeObject.tp_flags` gesetzt, " +"wird :c:member:`~PyTypeObject.tp_weaklistoffset` auf einen negativen Wert " +"gesetzt, um anzuzeigen, dass es nicht gefahrlos verwendet werden kann." #: ../../c-api/typeobj.rst:1851 msgid "" @@ -3020,24 +3901,31 @@ msgid "" "are :term:`iterable` (although sequences may be iterable without this " "function)." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die einen :term:`Iterator " +"` für das Objekt zurückgibt. Sein Vorhandensein zeigt " +"normalerweise an, dass die Instanzen dieses Typs :term:`iterierbar " +"` sind (Sequenzen können allerdings auch ohne diese Funktion " +"iterierbar sein)." #: ../../c-api/typeobj.rst:1855 msgid "This function has the same signature as :c:func:`PyObject_GetIter`::" -msgstr "" +msgstr "Diese Funktion hat dieselbe Signatur wie :c:func:`PyObject_GetIter`::" #: ../../c-api/typeobj.rst:1857 msgid "PyObject *tp_iter(PyObject *self);" -msgstr "" +msgstr "PyObject *tp_iter(PyObject *self);" #: ../../c-api/typeobj.rst:1868 msgid "" "An optional pointer to a function that returns the next item in " "an :term:`iterator`. The signature is::" msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die das nächste Element " +"eines :term:`Iterators ` zurückgibt. Die Signatur lautet::" #: ../../c-api/typeobj.rst:1871 msgid "PyObject *tp_iternext(PyObject *self);" -msgstr "" +msgstr "PyObject *tp_iternext(PyObject *self);" #: ../../c-api/typeobj.rst:1873 msgid "" @@ -3046,6 +3934,11 @@ msgid "" "When another error occurs, it must return ``NULL`` too. The presence of " "``tp_iternext`` signals that the instances of this type are iterators." msgstr "" +"Ist der Iterator :term:`erschöpft `, muss die Funktion " +"``tp_iternext`` ``NULL`` zurückgeben. Eine :exc:`StopIteration`-Ausnahme " +"kann gesetzt sein oder auch nicht. Tritt ein anderer Fehler auf, muss sie " +"ebenfalls ``NULL`` zurückgeben. Das Vorhandensein von ``tp_iternext`` zeigt " +"an, dass die Instanzen dieses Typs Iteratoren sind." #: ../../c-api/typeobj.rst:1879 msgid "" @@ -3053,28 +3946,39 @@ msgid "" "function, and that function should return the iterator instance itself (not " "a new iterator instance)." msgstr "" +"Iteratortypen sollten außerdem die " +"Funktion :c:member:`~PyTypeObject.tp_iter` festlegen, und diese Funktion " +"sollte die Iterator-Instanz selbst zurückgeben (keine neue Iterator-Instanz)." #: ../../c-api/typeobj.rst:1883 msgid "This function has the same signature as :c:func:`PyIter_Next`." -msgstr "" +msgstr "Diese Funktion hat dieselbe Signatur wie :c:func:`PyIter_Next`." #: ../../c-api/typeobj.rst:1894 msgid "" "An optional pointer to a static ``NULL``-terminated array " "of :c:type:`PyMethodDef` structures, declaring regular methods of this type." msgstr "" +"Ein wahlfreier Zeiger auf ein statisches, ``NULL``-terminiertes Array " +"von :c:type:`PyMethodDef`-Strukturen, die die gewöhnlichen Methoden dieses " +"Typs deklarieren." #: ../../c-api/typeobj.rst:1897 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a method descriptor." msgstr "" +"Für jeden Eintrag im Array wird dem Dictionary des Typs " +"(siehe :c:member:`~PyTypeObject.tp_dict` unten) ein Eintrag mit einem " +"Methodendeskriptor hinzugefügt." #: ../../c-api/typeobj.rst:1902 msgid "" "This field is not inherited by subtypes (methods are inherited through a " "different mechanism)." msgstr "" +"Dieses Feld wird nicht an Untertypen vererbt (Methoden werden über einen " +"anderen Mechanismus vererbt)." #: ../../c-api/typeobj.rst:1910 msgid "" @@ -3082,18 +3986,26 @@ msgid "" "of :c:type:`PyMemberDef` structures, declaring regular data members (fields " "or slots) of instances of this type." msgstr "" +"Ein wahlfreier Zeiger auf ein statisches, ``NULL``-terminiertes Array " +"von :c:type:`PyMemberDef`-Strukturen, die die gewöhnlichen Datenmember " +"(Felder oder Slots) von Instanzen dieses Typs deklarieren." #: ../../c-api/typeobj.rst:1914 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a member descriptor." msgstr "" +"Für jeden Eintrag im Array wird dem Dictionary des Typs " +"(siehe :c:member:`~PyTypeObject.tp_dict` unten) ein Eintrag mit einem Member-" +"Deskriptor hinzugefügt." #: ../../c-api/typeobj.rst:1919 msgid "" "This field is not inherited by subtypes (members are inherited through a " "different mechanism)." msgstr "" +"Dieses Feld wird nicht an Untertypen vererbt (Member werden über einen " +"anderen Mechanismus vererbt)." #: ../../c-api/typeobj.rst:1927 msgid "" @@ -3101,18 +4013,26 @@ msgid "" "of :c:type:`PyGetSetDef` structures, declaring computed attributes of " "instances of this type." msgstr "" +"Ein wahlfreier Zeiger auf ein statisches, ``NULL``-terminiertes Array " +"von :c:type:`PyGetSetDef`-Strukturen, die berechnete Attribute von Instanzen " +"dieses Typs deklarieren." #: ../../c-api/typeobj.rst:1930 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a getset descriptor." msgstr "" +"Für jeden Eintrag im Array wird dem Dictionary des Typs " +"(siehe :c:member:`~PyTypeObject.tp_dict` unten) ein Eintrag mit einem getset-" +"Deskriptor hinzugefügt." #: ../../c-api/typeobj.rst:1935 msgid "" "This field is not inherited by subtypes (computed attributes are inherited " "through a different mechanism)." msgstr "" +"Dieses Feld wird nicht an Untertypen vererbt (berechnete Attribute werden " +"über einen anderen Mechanismus vererbt)." #: ../../c-api/typeobj.rst:1941 msgid "" @@ -3121,10 +4041,14 @@ msgid "" "inheritance require dynamically creating a type object by calling the " "metatype." msgstr "" +"Ein wahlfreier Zeiger auf einen Basistyp, von dem Typeigenschaften geerbt " +"werden. Auf dieser Ebene wird nur Einfachvererbung unterstützt; " +"Mehrfachvererbung erfordert, ein Typobjekt dynamisch durch Aufruf des " +"Metatyps zu erzeugen." #: ../../c-api/typeobj.rst:1945 msgid "For the corresponding slot ID, see :c:macro:`Py_tp_base`." -msgstr "" +msgstr "Die zugehörige Slot-ID steht unter :c:macro:`Py_tp_base`." #: ../../c-api/typeobj.rst:1951 msgid "" @@ -3133,6 +4057,10 @@ msgid "" "like :c:func:`PyType_GenericNew`, with implicit conversion to a pointer, are " "valid C99 address constants." msgstr "" +"Für das Initialisieren von Slots gelten die Regeln zum Initialisieren von " +"Globalen. C99 verlangt, dass die Initialisierer „Adresskonstanten“ sind. " +"Funktionsbezeichner wie :c:func:`PyType_GenericNew` sind mit ihrer " +"stillschweigenden Umwandlung in einen Zeiger gültige C99-Adresskonstanten." #: ../../c-api/typeobj.rst:1956 msgid "" @@ -3141,26 +4069,34 @@ msgid "" "constant. Compilers may support this (gcc does), MSVC does not. Both " "compilers are strictly standard conforming in this particular behavior." msgstr "" +"Der unäre Operator „&“, angewendet auf eine nicht statische Variable " +"wie :c:data:`PyBaseObject_Type`, muss dagegen keine Adresskonstante ergeben. " +"Compiler dürfen das unterstützen (gcc tut es), MSVC tut es nicht. Beide " +"Compiler halten sich in diesem Punkt streng an den Standard." #: ../../c-api/typeobj.rst:1962 msgid "" "Consequently, :c:member:`~PyTypeObject.tp_base` should be set in the " "extension module's init function." msgstr "" +"Folglich sollte :c:member:`~PyTypeObject.tp_base` in der init-Funktion des " +"Erweiterungsmoduls gesetzt werden." #: ../../c-api/typeobj.rst:1967 msgid "This field is not inherited by subtypes (obviously)." -msgstr "" +msgstr "Dieses Feld wird (selbstverständlich) nicht an Untertypen vererbt." #: ../../c-api/typeobj.rst:1971 msgid "" "This field defaults to ``&PyBaseObject_Type`` (which to Python programmers " "is known as the type :class:`object`)." msgstr "" +"Dieses Feld ist auf ``&PyBaseObject_Type`` voreingestellt (was Python-" +"Programmierer als den Typ :class:`object` kennen)." #: ../../c-api/typeobj.rst:1977 msgid "The type's dictionary is stored here by :c:func:`PyType_Ready`." -msgstr "" +msgstr "Das Dictionary des Typs wird hier von :c:func:`PyType_Ready` abgelegt." #: ../../c-api/typeobj.rst:1979 msgid "" @@ -3172,6 +4108,14 @@ msgid "" "(like :meth:`~object.__add__`). Once initialization for the type has " "finished, this field should be treated as read-only." msgstr "" +"Dieses Feld sollte normalerweise auf ``NULL`` initialisiert werden, bevor " +"PyType_Ready aufgerufen wird. Es darf auch mit einem Dictionary mit " +"Anfangsattributen für den Typ initialisiert werden. " +"Sobald :c:func:`PyType_Ready` den Typ initialisiert hat, dürfen diesem " +"Dictionary nur dann weitere Attribute für den Typ hinzugefügt werden, wenn " +"sie nicht zu überladenen Operationen gehören (wie :meth:`~object.__add__`). " +"Ist die Initialisierung des Typs abgeschlossen, sollte dieses Feld als nur " +"lesbar behandelt werden." #: ../../c-api/typeobj.rst:1987 msgid "" @@ -3179,6 +4123,9 @@ msgid "" "Use :c:func:`PyType_GetDict` to retrieve the dictionary for an arbitrary " "type." msgstr "" +"Manche Typen legen ihr Dictionary nicht in diesem Slot ab. " +"Verwende :c:func:`PyType_GetDict`, um das Dictionary eines beliebigen Typs " +"zu holen." #: ../../c-api/typeobj.rst:1993 msgid "" @@ -3186,58 +4133,77 @@ msgid "" "Instead, the dict for such types is stored on ``PyInterpreterState``. " "Use :c:func:`PyType_GetDict` to get the dict for an arbitrary type." msgstr "" +"Zu den Interna: Bei statischen integrierten Typen ist das immer ``NULL``. " +"Das Dictionary solcher Typen liegt stattdessen am ``PyInterpreterState``. " +"Verwende :c:func:`PyType_GetDict`, um das Dictionary eines beliebigen Typs " +"zu bekommen." #: ../../c-api/typeobj.rst:1999 msgid "" "This field is not inherited by subtypes (though the attributes defined in " "here are inherited through a different mechanism)." msgstr "" +"Dieses Feld wird nicht an Untertypen vererbt (die hier festgelegten " +"Attribute werden allerdings über einen anderen Mechanismus vererbt)." #: ../../c-api/typeobj.rst:2004 msgid "" "If this field is ``NULL``, :c:func:`PyType_Ready` will assign a new " "dictionary to it." msgstr "" +"Ist dieses Feld ``NULL``, weist :c:func:`PyType_Ready` ihm ein neues " +"Dictionary zu." #: ../../c-api/typeobj.rst:2009 msgid "" "It is not safe to use :c:func:`PyDict_SetItem` on or otherwise " "modify :c:member:`~PyTypeObject.tp_dict` with the dictionary C-API." msgstr "" +"Es ist nicht gefahrlos möglich, :c:func:`PyDict_SetItem` " +"auf :c:member:`~PyTypeObject.tp_dict` anzuwenden oder es anderweitig über " +"die Dictionary-C-API zu ändern." #: ../../c-api/typeobj.rst:2017 msgid "An optional pointer to a \"descriptor get\" function." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zum Lesen eines Deskriptors " +"(„descriptor get“)." #: ../../c-api/typeobj.rst:2019 ../../c-api/typeobj.rst:2037 #: ../../c-api/typeobj.rst:2103 ../../c-api/typeobj.rst:2135 #: ../../c-api/typeobj.rst:2160 msgid "The function signature is::" -msgstr "" +msgstr "Die Signatur der Funktion lautet::" #: ../../c-api/typeobj.rst:2021 msgid "PyObject * tp_descr_get(PyObject *self, PyObject *obj, PyObject *type);" msgstr "" +"PyObject * tp_descr_get(PyObject *self, PyObject *obj, PyObject *type);" #: ../../c-api/typeobj.rst:2034 msgid "" "An optional pointer to a function for setting and deleting a descriptor's " "value." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zum Setzen und Löschen des Werts " +"eines Deskriptors." #: ../../c-api/typeobj.rst:2039 msgid "int tp_descr_set(PyObject *self, PyObject *obj, PyObject *value);" -msgstr "" +msgstr "int tp_descr_set(PyObject *self, PyObject *obj, PyObject *value);" #: ../../c-api/typeobj.rst:2041 msgid "The *value* argument is set to ``NULL`` to delete the value." msgstr "" +"Das Argument *value* wird auf ``NULL`` gesetzt, um den Wert zu löschen." #: ../../c-api/typeobj.rst:2052 msgid "" "While this field is still supported, :c:macro:`Py_TPFLAGS_MANAGED_DICT` " "should be used instead, if at all possible." msgstr "" +"Dieses Feld wird zwar weiterhin unterstützt, aber nach Möglichkeit sollte " +"stattdessen :c:macro:`Py_TPFLAGS_MANAGED_DICT` verwendet werden." #: ../../c-api/typeobj.rst:2055 msgid "" @@ -3246,18 +4212,25 @@ msgid "" "of the type of the instance variable dictionary; this offset is used " "by :c:func:`PyObject_GenericGetAttr`." msgstr "" +"Haben die Instanzen dieses Typs ein Dictionary mit Instanzvariablen, ist " +"dieses Feld ungleich null und enthält den Versatz des Dictionarys der " +"Instanzvariablen in den Instanzen des Typs. Dieser Versatz wird " +"von :c:func:`PyObject_GenericGetAttr` verwendet." #: ../../c-api/typeobj.rst:2060 msgid "" "Do not confuse this field with :c:member:`~PyTypeObject.tp_dict`; that is " "the dictionary for attributes of the type object itself." msgstr "" +"Verwechsle dieses Feld nicht mit :c:member:`~PyTypeObject.tp_dict`. Das ist " +"das Dictionary für die Attribute des Typobjekts selbst." #: ../../c-api/typeobj.rst:2063 msgid "" "The value specifies the offset of the dictionary from the start of the " "instance structure." msgstr "" +"Der Wert gibt den Versatz des Dictionarys vom Anfang der Instanzstruktur an." #: ../../c-api/typeobj.rst:2065 msgid "" @@ -3268,12 +4241,21 @@ msgid "" "the dictionary, so it is may be more efficient to " "call :c:func:`PyObject_GetAttr` when accessing an attribute on the object." msgstr "" +":c:member:`~PyTypeObject.tp_dictoffset` sollte als nur schreibbar betrachtet " +"werden. Um den Zeiger auf das Dictionary zu bekommen, " +"rufe :c:func:`PyObject_GenericGetDict` auf. Der Aufruf " +"von :c:func:`PyObject_GenericGetDict` muss möglicherweise Speicher für das " +"Dictionary anfordern, deshalb kann es wirksamer " +"sein, :c:func:`PyObject_GetAttr` aufzurufen, wenn du auf ein Attribut des " +"Objekts zugreifst." #: ../../c-api/typeobj.rst:2071 msgid "" "It is an error to set both the :c:macro:`Py_TPFLAGS_MANAGED_DICT` bit " "and :c:member:`~PyTypeObject.tp_dictoffset`." msgstr "" +"Es ist ein Fehler, sowohl das Bit :c:macro:`Py_TPFLAGS_MANAGED_DICT` als " +"auch :c:member:`~PyTypeObject.tp_dictoffset` zu setzen." #: ../../c-api/typeobj.rst:2076 msgid "" @@ -3282,6 +4264,10 @@ msgid "" "at the previous offset. To properly support inheritance, " "use :c:macro:`Py_TPFLAGS_MANAGED_DICT`." msgstr "" +"Dieses Feld wird an Untertypen vererbt. Ein Untertyp sollte diesen Versatz " +"nicht übergehen. Das könnte gefährlich sein, wenn C-Code versucht, auf das " +"Dictionary beim bisherigen Versatz zuzugreifen. Um Vererbung richtig zu " +"unterstützen, verwende :c:macro:`Py_TPFLAGS_MANAGED_DICT`." #: ../../c-api/typeobj.rst:2083 msgid "" @@ -3289,6 +4275,9 @@ msgid "" "field is ``NULL`` then no :attr:`~object.__dict__` gets created for " "instances." msgstr "" +"Dieser Slot hat keine Vorgabe. Bei :ref:`statischen Typen ` " +"wird für Instanzen kein :attr:`~object.__dict__` angelegt, wenn das Feld " +"``NULL`` ist." #: ../../c-api/typeobj.rst:2086 msgid "" @@ -3297,10 +4286,15 @@ msgid "" "then :c:member:`~PyTypeObject.tp_dictoffset` will be set to ``-1``, to " "indicate that it is unsafe to use this field." msgstr "" +"Ist das Bit :c:macro:`Py_TPFLAGS_MANAGED_DICT` im " +"Feld :c:member:`~PyTypeObject.tp_flags` gesetzt, " +"wird :c:member:`~PyTypeObject.tp_dictoffset` auf ``-1`` gesetzt, um " +"anzuzeigen, dass es nicht gefahrlos verwendet werden kann." #: ../../c-api/typeobj.rst:2096 msgid "An optional pointer to an instance initialization function." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zur Initialisierung von Instanzen." #: ../../c-api/typeobj.rst:2098 msgid "" @@ -3309,10 +4303,14 @@ msgid "" "without calling :meth:`!__init__`, and it is possible to reinitialize an " "instance by calling its :meth:`!__init__` method again." msgstr "" +"Diese Funktion entspricht der Methode :meth:`~object.__init__` von Klassen. " +"Wie bei :meth:`!__init__` lässt sich eine Instanz erzeugen, ohne :meth:`!" +"__init__` aufzurufen, und eine Instanz lässt sich neu initialisieren, indem " +"ihre Methode :meth:`!__init__` erneut aufgerufen wird." #: ../../c-api/typeobj.rst:2105 msgid "int tp_init(PyObject *self, PyObject *args, PyObject *kwds);" -msgstr "" +msgstr "int tp_init(PyObject *self, PyObject *args, PyObject *kwds);" #: ../../c-api/typeobj.rst:2107 msgid "" @@ -3320,6 +4318,9 @@ msgid "" "arguments represent positional and keyword arguments of the call " "to :meth:`~object.__init__`." msgstr "" +"Das Argument self ist die zu initialisierende Instanz. Die Argumente *args* " +"und *kwds* stehen für die Positions- und Schlüsselwortargumente des Aufrufs " +"von :meth:`~object.__init__`." #: ../../c-api/typeobj.rst:2111 msgid "" @@ -3332,51 +4333,70 @@ msgid "" "if :c:member:`~PyTypeObject.tp_new` returns an instance of a subtype of the " "original type, the subtype's :c:member:`~PyTypeObject.tp_init` is called." msgstr "" +"Die Funktion :c:member:`~PyTypeObject.tp_init` wird, sofern sie nicht " +"``NULL`` ist, aufgerufen, wenn eine Instanz auf gewöhnlichem Weg durch " +"Aufruf ihres Typs erzeugt wird, nachdem die " +"Funktion :c:member:`~PyTypeObject.tp_new` des Typs eine Instanz des Typs " +"zurückgegeben hat. Gibt die Funktion :c:member:`~PyTypeObject.tp_new` eine " +"Instanz eines anderen Typs zurück, der kein Untertyp des ursprünglichen Typs " +"ist, wird keine Funktion :c:member:`~PyTypeObject.tp_init` aufgerufen. " +"Gibt :c:member:`~PyTypeObject.tp_new` eine Instanz eines Untertyps des " +"ursprünglichen Typs zurück, wird :c:member:`~PyTypeObject.tp_init` des " +"Untertyps aufgerufen." #: ../../c-api/typeobj.rst:2118 msgid "Returns ``0`` on success, ``-1`` and sets an exception on error." msgstr "" +"Gibt bei Erfolg ``0`` zurück, im Fehlerfall ``-1``, und setzt eine Ausnahme." #: ../../c-api/typeobj.rst:2126 msgid "" "For :ref:`static types ` this field does not have a default." msgstr "" +"Bei :ref:`statischen Typen ` hat dieses Feld keine Vorgabe." #: ../../c-api/typeobj.rst:2133 msgid "An optional pointer to an instance allocation function." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zur Speicheranforderung für " +"Instanzen." #: ../../c-api/typeobj.rst:2137 msgid "PyObject *tp_alloc(PyTypeObject *self, Py_ssize_t nitems);" -msgstr "" +msgstr "PyObject *tp_alloc(PyTypeObject *self, Py_ssize_t nitems);" #: ../../c-api/typeobj.rst:2141 msgid "" "Static subtypes inherit this slot, which will " "be :c:func:`PyType_GenericAlloc` if inherited from :class:`object`." msgstr "" +"Statische Untertypen erben diesen Slot. Er " +"ist :c:func:`PyType_GenericAlloc`, wenn er von :class:`object` geerbt wird." #: ../../c-api/typeobj.rst:2144 ../../c-api/typeobj.rst:2215 msgid ":ref:`Heap subtypes ` do not inherit this slot." -msgstr "" +msgstr ":ref:`Heap-Untertypen ` erben diesen Slot nicht." #: ../../c-api/typeobj.rst:2148 msgid "" "For heap subtypes, this field is always set to :c:func:`PyType_GenericAlloc`." msgstr "" +"Bei Heap-Untertypen ist dieses Feld immer auf :c:func:`PyType_GenericAlloc` " +"gesetzt." #: ../../c-api/typeobj.rst:2151 ../../c-api/typeobj.rst:2223 msgid "For static subtypes, this slot is inherited (see above)." -msgstr "" +msgstr "Bei statischen Untertypen wird dieser Slot vererbt (siehe oben)." #: ../../c-api/typeobj.rst:2158 msgid "An optional pointer to an instance creation function." -msgstr "" +msgstr "Ein wahlfreier Zeiger auf eine Funktion zum Erzeugen von Instanzen." #: ../../c-api/typeobj.rst:2162 msgid "" "PyObject *tp_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds);" msgstr "" +"PyObject *tp_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds);" #: ../../c-api/typeobj.rst:2164 msgid "" @@ -3386,6 +4406,11 @@ msgid "" "whose :c:member:`~PyTypeObject.tp_new` function is called; it may be a " "subtype of that type (but not an unrelated type)." msgstr "" +"Das Argument *subtype* ist der Typ des zu erzeugenden Objekts. Die Argumente " +"*args* und *kwds* stehen für die Positions- und Schlüsselwortargumente des " +"Aufrufs des Typs. Beachte, dass *subtype* nicht gleich dem Typ sein muss, " +"dessen Funktion :c:member:`~PyTypeObject.tp_new` aufgerufen wird. Es darf " +"ein Untertyp dieses Typs sein (aber kein unverwandter Typ)." #: ../../c-api/typeobj.rst:2170 msgid "" @@ -3398,12 +4423,22 @@ msgid "" "in :c:member:`~PyTypeObject.tp_new`, while for mutable types, most " "initialization should be deferred to :c:member:`~PyTypeObject.tp_init`." msgstr "" +"Die Funktion :c:member:`~PyTypeObject.tp_new` sollte ``subtype-" +">tp_alloc(subtype, nitems)`` aufrufen, um Platz für das Objekt anzufordern, " +"und danach nur so viel weitere Initialisierung vornehmen, wie unbedingt " +"nötig ist. Initialisierung, die sich gefahrlos überspringen oder wiederholen " +"lässt, gehört in den Handler :c:member:`~PyTypeObject.tp_init`. Als " +"Faustregel gilt: Bei unveränderlichen Typen sollte alle Initialisierung " +"in :c:member:`~PyTypeObject.tp_new` stattfinden, bei veränderlichen Typen " +"sollte das meiste auf :c:member:`~PyTypeObject.tp_init` verschoben werden." #: ../../c-api/typeobj.rst:2178 msgid "" "Set the :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag to disallow " "creating instances of the type in Python." msgstr "" +"Setze das Flag :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION`, um das Erzeugen " +"von Instanzen des Typs in Python zu verbieten." #: ../../c-api/typeobj.rst:2183 msgid "" @@ -3412,6 +4447,9 @@ msgid "" "whose :c:member:`~PyTypeObject.tp_base` is ``NULL`` or " "``&PyBaseObject_Type``." msgstr "" +"Dieses Feld wird an Untertypen vererbt, außer an :ref:`statische Typen " +"`, deren :c:member:`~PyTypeObject.tp_base` ``NULL`` oder " +"``&PyBaseObject_Type`` ist." #: ../../c-api/typeobj.rst:2189 msgid "" @@ -3420,21 +4458,29 @@ msgid "" "instances; presumably there is some other way to create instances, like a " "factory function." msgstr "" +"Bei :ref:`statischen Typen ` hat dieses Feld keine Vorgabe. " +"Das bedeutet: Ist der Slot als ``NULL`` festgelegt, lässt sich der Typ nicht " +"aufrufen, um neue Instanzen zu erzeugen. Vermutlich gibt es dann einen " +"anderen Weg, Instanzen zu erzeugen, etwa eine Factory-Funktion." #: ../../c-api/typeobj.rst:2199 msgid "" "An optional pointer to an instance deallocation function. Its signature is::" msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zur Speicherfreigabe für Instanzen. " +"Ihre Signatur lautet::" #: ../../c-api/typeobj.rst:2201 msgid "void tp_free(void *self);" -msgstr "" +msgstr "void tp_free(void *self);" #: ../../c-api/typeobj.rst:2203 msgid "" "This function must free the memory allocated " "by :c:member:`~PyTypeObject.tp_alloc`." msgstr "" +"Diese Funktion muss den Speicher freigeben, " +"den :c:member:`~PyTypeObject.tp_alloc` angefordert hat." #: ../../c-api/typeobj.rst:2208 msgid "" @@ -3445,6 +4491,12 @@ msgid "" "inherit :c:func:`PyObject_Free`, then this slot is not inherited but instead " "defaults to :c:func:`PyObject_GC_Del`." msgstr "" +"Statische Untertypen erben diesen Slot. Er ist :c:func:`PyObject_Free`, wenn " +"er von :class:`object` geerbt wird. Ausnahme: Unterstützt der Typ die " +"Speicherbereinigung (ist also das Flag :c:macro:`Py_TPFLAGS_HAVE_GC` " +"in :c:member:`~PyTypeObject.tp_flags` gesetzt) und würde " +"er :c:func:`PyObject_Free` erben, wird dieser Slot nicht vererbt, sondern " +"ist auf :c:func:`PyObject_GC_Del` voreingestellt." #: ../../c-api/typeobj.rst:2219 msgid "" @@ -3452,10 +4504,14 @@ msgid "" "suitable to match :c:func:`PyType_GenericAlloc` and the value of " "the :c:macro:`Py_TPFLAGS_HAVE_GC` flag." msgstr "" +"Bei :ref:`Heap-Untertypen ` ist dieser Slot auf einen " +"Deallokator voreingestellt, der zu :c:func:`PyType_GenericAlloc` und zum " +"Wert des Flags :c:macro:`Py_TPFLAGS_HAVE_GC` passt." #: ../../c-api/typeobj.rst:2230 msgid "An optional pointer to a function called by the garbage collector." msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion, die die Speicherbereinigung aufruft." #: ../../c-api/typeobj.rst:2232 msgid "" @@ -3468,10 +4524,18 @@ msgid "" "function; it should return ``1`` for a collectible instance, and ``0`` for a " "non-collectible instance. The signature is::" msgstr "" +"Die Speicherbereinigung muss wissen, ob ein bestimmtes Objekt einsammelbar " +"ist oder nicht. Normalerweise genügt es, das " +"Feld :c:member:`~PyTypeObject.tp_flags` des Typs des Objekts anzusehen und " +"das Flag-Bit :c:macro:`Py_TPFLAGS_HAVE_GC` zu prüfen. Manche Typen haben " +"aber eine Mischung aus statisch und dynamisch angelegten Instanzen, und die " +"statisch angelegten Instanzen sind nicht einsammelbar. Solche Typen sollten " +"diese Funktion festlegen. Sie sollte ``1`` für eine einsammelbare und ``0`` " +"für eine nicht einsammelbare Instanz zurückgeben. Die Signatur lautet::" #: ../../c-api/typeobj.rst:2240 msgid "int tp_is_gc(PyObject *self);" -msgstr "" +msgstr "int tp_is_gc(PyObject *self);" #: ../../c-api/typeobj.rst:2242 msgid "" @@ -3479,26 +4543,33 @@ msgid "" "metatype, :c:data:`PyType_Type`, defines this function to distinguish " "between statically and :ref:`dynamically allocated types `.)" msgstr "" +"(Das einzige Beispiel dafür sind die Typen selbst. Der " +"Metatyp :c:data:`PyType_Type` legt diese Funktion fest, um zwischen statisch " +"und :ref:`dynamisch angelegten Typen ` zu unterscheiden.)" #: ../../c-api/typeobj.rst:2252 msgid "" "This slot has no default. If this field is " "``NULL``, :c:macro:`Py_TPFLAGS_HAVE_GC` is used as the functional equivalent." msgstr "" +"Dieser Slot hat keine Vorgabe. Ist dieses Feld ``NULL``, " +"wird :c:macro:`Py_TPFLAGS_HAVE_GC` als funktionale Entsprechung verwendet." #: ../../c-api/typeobj.rst:2258 msgid "Tuple of base types." -msgstr "" +msgstr "Tupel der Basistypen." #: ../../c-api/typeobj.rst:2260 ../../c-api/typeobj.rst:2281 msgid "" "This field should be set to ``NULL`` and treated as read-only. Python will " "fill it in when the type is :c:func:`initialized `." msgstr "" +"Dieses Feld sollte auf ``NULL`` gesetzt und als nur lesbar behandelt werden. " +"Python füllt es, wenn der Typ :c:func:`initialisiert ` wird." #: ../../c-api/typeobj.rst:2263 msgid "For the corresponding slot ID, see :c:macro:`Py_tp_bases`." -msgstr "" +msgstr "Die zugehörige Slot-ID steht unter :c:macro:`Py_tp_bases`." #: ../../c-api/typeobj.rst:2267 msgid "" @@ -3506,51 +4577,67 @@ msgid "" "set ``tp_bases`` to a tuple, Python will not raise an error, but some slots " "will only be inherited from the first base." msgstr "" +"Mehrfachvererbung funktioniert bei statisch festgelegten Typen nicht gut. " +"Setzt du ``tp_bases`` auf ein Tupel, löst Python zwar keinen Fehler aus, " +"manche Slots werden aber nur vom ersten Basistyp geerbt." #: ../../c-api/typeobj.rst:2273 ../../c-api/typeobj.rst:2296 #: ../../c-api/typeobj.rst:2313 ../../c-api/typeobj.rst:2330 #: ../../c-api/typeobj.rst:2346 msgid "This field is not inherited." -msgstr "" +msgstr "Dieses Feld wird nicht vererbt." #: ../../c-api/typeobj.rst:2278 msgid "" "Tuple containing the expanded set of base types, starting with the type " "itself and ending with :class:`object`, in Method Resolution Order." msgstr "" +"Tupel mit der aufgefalteten Menge der Basistypen, beginnend mit dem Typ " +"selbst und endend mit :class:`object`, in der Reihenfolge der " +"Methodenauflösung." #: ../../c-api/typeobj.rst:2286 msgid "" "This field is not inherited; it is calculated fresh " "by :c:func:`PyType_Ready`." msgstr "" +"Dieses Feld wird nicht vererbt. Es wird von :c:func:`PyType_Ready` neu " +"berechnet." #: ../../c-api/typeobj.rst:2292 msgid "Unused. Internal use only." -msgstr "" +msgstr "Unbenutzt. Nur für den internen Gebrauch." #: ../../c-api/typeobj.rst:2301 msgid "" "A collection of subclasses. Internal use only. May be an invalid pointer." msgstr "" +"Eine Sammlung von Unterklassen. Nur für den internen Gebrauch. Kann ein " +"ungültiger Zeiger sein." #: ../../c-api/typeobj.rst:2303 msgid "" "To get a list of subclasses, call the Python " "method :py:meth:`~type.__subclasses__`." msgstr "" +"Um eine Liste der Unterklassen zu bekommen, rufe die Python-" +"Methode :py:meth:`~type.__subclasses__` auf." #: ../../c-api/typeobj.rst:2308 msgid "" "For some types, this field does not hold a valid :c:expr:`PyObject*`. The " "type was changed to :c:expr:`void*` to indicate this." msgstr "" +"Bei manchen Typen enthält dieses Feld keinen gültigen :c:expr:`PyObject*`. " +"Der Typ wurde zu :c:expr:`void*` geändert, um das anzuzeigen." #: ../../c-api/typeobj.rst:2318 msgid "" "Weak reference list head, for weak references to this type object. Not " "inherited. Internal use only." msgstr "" +"Kopf der Liste schwacher Referenzen, für schwache Referenzen auf dieses " +"Typobjekt. Wird nicht vererbt. Nur für den internen Gebrauch." #: ../../c-api/typeobj.rst:2323 msgid "" @@ -3559,15 +4646,23 @@ msgid "" "``PyInterpreterState``. Use the public C-API or the internal " "``_PyObject_GET_WEAKREFS_LISTPTR()`` macro to avoid the distinction." msgstr "" +"Zu den Interna: Bei den statischen integrierten Typen ist das immer " +"``NULL``, auch wenn schwache Referenzen hinzugefügt werden. Die schwachen " +"Referenzen jedes einzelnen liegen stattdessen am ``PyInterpreterState``. " +"Verwende die öffentliche C-API oder das interne Makro " +"``_PyObject_GET_WEAKREFS_LISTPTR()``, um dir diese Unterscheidung zu " +"ersparen." #: ../../c-api/typeobj.rst:2337 msgid "" "This field is deprecated. Use :c:member:`~PyTypeObject.tp_finalize` instead." msgstr "" +"Dieses Feld ist veraltet. Verwende " +"stattdessen :c:member:`~PyTypeObject.tp_finalize`." #: ../../c-api/typeobj.rst:2342 msgid "Used to index into the method cache. Internal use only." -msgstr "" +msgstr "Dient als Index in den Methoden-Cache. Nur für den internen Gebrauch." #: ../../c-api/typeobj.rst:2353 msgid "" @@ -3575,10 +4670,13 @@ msgid "" "implementation of the :meth:`~object.__del__` special method. Its signature " "is::" msgstr "" +"Ein wahlfreier Zeiger auf eine Funktion zur Finalisierung von Instanzen. Das " +"ist die C-Umsetzung der speziellen Methode :meth:`~object.__del__`. Ihre " +"Signatur lautet::" #: ../../c-api/typeobj.rst:2357 msgid "void tp_finalize(PyObject *self);" -msgstr "" +msgstr "void tp_finalize(PyObject *self);" #: ../../c-api/typeobj.rst:2359 msgid "" @@ -3587,6 +4685,11 @@ msgid "" "any other objects it directly or indirectly references are still in a " "consistent state. The finalizer is allowed to execute arbitrary Python code." msgstr "" +"Der Hauptzweck der Finalisierung ist es, nicht triviale Aufräumarbeiten zu " +"erledigen, die vor der Zerstörung des Objekts stattfinden müssen, solange " +"das Objekt und alle Objekte, die es unmittelbar oder mittelbar referenziert, " +"noch in einem widerspruchsfreien Zustand sind. Der Finalisierer darf " +"beliebigen Python-Code ausführen." #: ../../c-api/typeobj.rst:2365 msgid "" @@ -3595,6 +4698,11 @@ msgid "" "However, none of the referents will have been automatically cleared " "(:c:member:`~PyTypeObject.tp_clear`) yet." msgstr "" +"Bevor Python ein Objekt automatisch finalisiert, können einige der " +"unmittelbar oder mittelbar referenzierten Objekte ihrerseits bereits " +"automatisch finalisiert worden sein. Keines der referenzierten Objekte wird " +"zu diesem Zeitpunkt aber bereits automatisch geleert worden sein " +"(:c:member:`~PyTypeObject.tp_clear`)." #: ../../c-api/typeobj.rst:2370 msgid "" @@ -3602,6 +4710,10 @@ msgid "" "finalizer must leave the object in a sane state (e.g., invariants are still " "met)." msgstr "" +"Andere, noch nicht finalisierte Objekte verwenden ein finalisiertes Objekt " +"möglicherweise noch, deshalb muss der Finalisierer das Objekt in einem " +"vernünftigen Zustand hinterlassen (die Invarianten müssen also weiterhin " +"gelten)." #: ../../c-api/typeobj.rst:2376 msgid "" @@ -3611,6 +4723,12 @@ msgid "" "be in a consistent state; a finalized object must be able to tolerate " "cleared referents." msgstr "" +"Nachdem Python ein Objekt automatisch finalisiert hat, beginnt es " +"möglicherweise damit, das Objekt und die von ihm referenzierten Objekte " +"(unmittelbar und mittelbar) automatisch zu leeren " +"(:c:member:`~PyTypeObject.tp_clear`). Dass geleerte Objekte in einem " +"widerspruchsfreien Zustand sind, ist nicht zugesichert. Ein finalisiertes " +"Objekt muss geleerte referenzierte Objekte verkraften." #: ../../c-api/typeobj.rst:2384 msgid "" @@ -3620,12 +4738,19 @@ msgid "" "beginning of :c:member:`!tp_dealloc` to guarantee that the object is always " "finalized before destruction." msgstr "" +"Dass ein Objekt automatisch finalisiert wird, bevor sein Destruktor " +"(:c:member:`~PyTypeObject.tp_dealloc`) aufgerufen wird, ist nicht " +"zugesichert. Es wird empfohlen, am Anfang von :c:member:`!" +"tp_dealloc` :c:func:`PyObject_CallFinalizerFromDealloc` aufzurufen, damit " +"das Objekt vor der Zerstörung in jedem Fall finalisiert ist." #: ../../c-api/typeobj.rst:2392 msgid "" "The :c:member:`~PyTypeObject.tp_finalize` function can be called from any " "thread, although the :term:`GIL` will be held." msgstr "" +"Die Funktion :c:member:`~PyTypeObject.tp_finalize` darf aus jedem Thread " +"aufgerufen werden, der :term:`GIL` wird dabei allerdings gehalten." #: ../../c-api/typeobj.rst:2397 msgid "" @@ -3633,11 +4758,16 @@ msgid "" "some global variables have been deleted. See the documentation of " "the :meth:`~object.__del__` method for details." msgstr "" +"Die Funktion :c:member:`!tp_finalize` kann beim Herunterfahren aufgerufen " +"werden, nachdem einige globale Variablen bereits gelöscht wurden. " +"Einzelheiten stehen in der Dokumentation zur Methode :meth:`~object.__del__`." #: ../../c-api/typeobj.rst:2401 msgid "" "When Python finalizes an object, it behaves like the following algorithm:" msgstr "" +"Wenn Python ein Objekt finalisiert, verhält es sich wie der folgende " +"Algorithmus:" #: ../../c-api/typeobj.rst:2403 msgid "" @@ -3647,12 +4777,20 @@ msgid "" "in :c:member:`~PyTypeObject.tp_flags`) and never marks other types of " "objects; this might change in a future version." msgstr "" +"Python markiert das Objekt möglicherweise als *finalisiert*. Derzeit " +"markiert Python immer Objekte, deren Typ die Speicherbereinigung unterstützt " +"(bei denen also das Flag :c:macro:`Py_TPFLAGS_HAVE_GC` " +"in :c:member:`~PyTypeObject.tp_flags` gesetzt ist), und nie andere Arten von " +"Objekten. Das kann sich in einer künftigen Version ändern." #: ../../c-api/typeobj.rst:2408 msgid "" "If the object is not marked as *finalized* and its :c:member:`!tp_finalize` " "finalizer function is non-``NULL``, the finalizer function is called." msgstr "" +"Ist das Objekt nicht als *finalisiert* markiert und ist seine " +"Finalisiererfunktion :c:member:`!tp_finalize` ungleich ``NULL``, wird die " +"Finalisiererfunktion aufgerufen." #: ../../c-api/typeobj.rst:2411 msgid "" @@ -3663,6 +4801,13 @@ msgid "" "resurrect the object by adding a new reference to the object that does not " "make it reachable, i.e., the object is (still) a member of a cyclic isolate." msgstr "" +"Wurde die Finalisiererfunktion aufgerufen und hat der Finalisierer das " +"Objekt wieder erreichbar gemacht (besteht also eine Referenz darauf und ist " +"es nicht Teil eines :term:`zyklischen Isolats `), sagt man, " +"der Finalisierer habe das Objekt *wieder auferstehen lassen*. Es ist nicht " +"festgelegt, ob der Finalisierer das Objekt auch dadurch auferstehen lassen " +"kann, dass er eine neue Referenz darauf hinzufügt, die es nicht erreichbar " +"macht, das Objekt also (weiterhin) Teil eines zyklischen Isolats ist." #: ../../c-api/typeobj.rst:2418 msgid "" @@ -3671,6 +4816,11 @@ msgid "" "Currently, Python never removes the *finalized* mark; this might change in a " "future version." msgstr "" +"Hat der Finalisierer das Objekt wieder auferstehen lassen, wird die " +"anstehende Zerstörung des Objekts abgebrochen, und die Markierung " +"*finalisiert* wird möglicherweise entfernt, sofern vorhanden. Derzeit " +"entfernt Python die Markierung *finalisiert* nie. Das kann sich in einer " +"künftigen Version ändern." #: ../../c-api/typeobj.rst:2423 msgid "" @@ -3679,6 +4829,11 @@ msgid "" "or :c:func:`PyObject_CallFinalizerFromDealloc`. No guarantees are made " "about when, if, or how often an object is automatically finalized, except:" msgstr "" +"*Automatische Finalisierung* bezeichnet jede Finalisierung, die Python " +"vornimmt, außer über Aufrufe von :c:func:`PyObject_CallFinalizer` " +"oder :c:func:`PyObject_CallFinalizerFromDealloc`. Darüber, wann, ob und wie " +"oft ein Objekt automatisch finalisiert wird, werden keine Zusagen gemacht, " +"außer:" #: ../../c-api/typeobj.rst:2428 msgid "" @@ -3686,6 +4841,9 @@ msgid "" "there is a reference to it and it is not a member of a :term:`cyclic " "isolate`." msgstr "" +"Python finalisiert ein Objekt nicht automatisch, wenn es erreichbar ist, " +"also wenn eine Referenz darauf besteht und es nicht Teil " +"eines :term:`zyklischen Isolats ` ist." #: ../../c-api/typeobj.rst:2431 msgid "" @@ -3696,18 +4854,29 @@ msgid "" "be manually finalized by calling :c:func:`PyObject_CallFinalizer` " "or :c:func:`PyObject_CallFinalizerFromDealloc`." msgstr "" +"Python finalisiert ein Objekt nicht automatisch, wenn das Finalisieren das " +"Objekt nicht als *finalisiert* markieren würde. Derzeit trifft das auf " +"Objekte zu, deren Typ die Speicherbereinigung nicht unterstützt, bei denen " +"also das Flag :c:macro:`Py_TPFLAGS_HAVE_GC` nicht gesetzt ist. Solche " +"Objekte lassen sich weiterhin von Hand finalisieren, " +"indem :c:func:`PyObject_CallFinalizer` " +"oder :c:func:`PyObject_CallFinalizerFromDealloc` aufgerufen wird." #: ../../c-api/typeobj.rst:2437 msgid "" "Python will not automatically finalize any two members of a :term:`cyclic " "isolate` concurrently." msgstr "" +"Python finalisiert nie zwei Mitglieder eines :term:`zyklischen Isolats " +"` gleichzeitig automatisch." #: ../../c-api/typeobj.rst:2439 msgid "" "Python will not automatically finalize an object after it has automatically " "cleared (:c:member:`~PyTypeObject.tp_clear`) the object." msgstr "" +"Python finalisiert ein Objekt nicht automatisch, nachdem es das Objekt " +"automatisch geleert hat (:c:member:`~PyTypeObject.tp_clear`)." #: ../../c-api/typeobj.rst:2441 msgid "" @@ -3715,6 +4884,9 @@ msgid "" "automatically finalize it after automatically clearing " "(see :c:member:`~PyTypeObject.tp_clear`) any other member." msgstr "" +"Ist ein Objekt Teil eines :term:`zyklischen Isolats `, " +"finalisiert Python es nicht automatisch, nachdem es irgendein anderes " +"Mitglied automatisch geleert hat (siehe :c:member:`~PyTypeObject.tp_clear`)." #: ../../c-api/typeobj.rst:2444 msgid "" @@ -3722,6 +4894,9 @@ msgid "" "before it automatically clears (see :c:member:`~PyTypeObject.tp_clear`) any " "of them." msgstr "" +"Python finalisiert jedes Mitglied eines :term:`zyklischen Isolats ` automatisch, bevor es irgendeines davon automatisch leert " +"(siehe :c:member:`~PyTypeObject.tp_clear`)." #: ../../c-api/typeobj.rst:2447 msgid "" @@ -3729,6 +4904,9 @@ msgid "" "(:c:member:`~PyTypeObject.tp_clear`), it will automatically finalize the " "object first." msgstr "" +"Will Python ein Objekt automatisch leeren " +"(:c:member:`~PyTypeObject.tp_clear`), finalisiert es das Objekt vorher " +"automatisch." #: ../../c-api/typeobj.rst:2451 msgid "" @@ -3736,6 +4914,9 @@ msgid "" "a :term:`cyclic isolate`, but future versions might finalize objects " "regularly before their destruction." msgstr "" +"CPython finalisiert derzeit nur Objekte automatisch, die Teil " +"eines :term:`zyklischen Isolats ` sind. Künftige Versionen " +"könnten Objekte aber regelmäßig vor ihrer Zerstörung finalisieren." #: ../../c-api/typeobj.rst:2455 msgid "" @@ -3743,6 +4924,9 @@ msgid "" "call :c:func:`PyObject_CallFinalizer` " "or :c:func:`PyObject_CallFinalizerFromDealloc` instead." msgstr "" +"Um ein Objekt von Hand zu finalisieren, rufe diese Funktion nicht " +"unmittelbar auf. Rufe stattdessen :c:func:`PyObject_CallFinalizer` " +"oder :c:func:`PyObject_CallFinalizerFromDealloc` auf." #: ../../c-api/typeobj.rst:2459 msgid "" @@ -3755,6 +4939,14 @@ msgid "" "with :c:func:`PyErr_WriteUnraisable` or :c:func:`PyErr_FormatUnraisable`. " "For example::" msgstr "" +":c:member:`~PyTypeObject.tp_finalize` sollte den aktuellen Ausnahmezustand " +"unverändert lassen. Der empfohlene Weg, einen nicht trivialen Finalisierer " +"zu schreiben, ist, die Ausnahme am Anfang " +"mit :c:func:`PyErr_GetRaisedException` zu sichern und am Ende " +"mit :c:func:`PyErr_SetRaisedException` wiederherzustellen. Stößt du mitten " +"im Finalisierer auf eine Ausnahme, protokolliere und lösche sie " +"mit :c:func:`PyErr_WriteUnraisable` oder :c:func:`PyErr_FormatUnraisable`. " +"Zum Beispiel::" #: ../../c-api/typeobj.rst:2468 msgid "" @@ -3778,6 +4970,25 @@ msgid "" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" +"static void\n" +"foo_finalize(PyObject *self)\n" +"{\n" +" // Save the current exception, if any.\n" +" PyObject *exc = PyErr_GetRaisedException();\n" +"\n" +" // ...\n" +"\n" +" if (do_something_that_might_raise() != success_indicator) {\n" +" PyErr_WriteUnraisable(self);\n" +" goto done;\n" +" }\n" +"\n" +"done:\n" +" // Restore the saved exception. This silently discards any exception\n" +" // raised above, so be sure to call PyErr_WriteUnraisable first if\n" +" // necessary.\n" +" PyErr_SetRaisedException(exc);\n" +"}" #: ../../c-api/typeobj.rst:2496 msgid "" @@ -3785,18 +4996,20 @@ msgid "" "the :c:macro:`Py_TPFLAGS_HAVE_FINALIZE` flags bit in order for this field to " "be used. This is no longer required." msgstr "" +"Vor Version 3.8 musste das Flag-Bit :c:macro:`Py_TPFLAGS_HAVE_FINALIZE` " +"gesetzt sein, damit dieses Feld verwendet wurde. Das ist nicht mehr nötig." #: ../../c-api/typeobj.rst:2502 msgid ":pep:`442`: \"Safe object finalization\"" -msgstr "" +msgstr ":pep:`442`: „Safe object finalization“" #: ../../c-api/typeobj.rst:2505 msgid ":c:func:`PyObject_CallFinalizer`" -msgstr "" +msgstr ":c:func:`PyObject_CallFinalizer`" #: ../../c-api/typeobj.rst:2506 msgid ":c:func:`PyObject_CallFinalizerFromDealloc`" -msgstr "" +msgstr ":c:func:`PyObject_CallFinalizerFromDealloc`" #: ../../c-api/typeobj.rst:2513 msgid "" @@ -3805,12 +5018,18 @@ msgid "" "used to optimize ``type.__call__``, which typically returns a new instance " "of *type*." msgstr "" +"Eine :ref:`vectorcall-Funktion `, die für Aufrufe dieses " +"Typobjekts (nicht seiner Instanzen) verwendet wird. Mit anderen Worten lässt " +"sich über ``tp_vectorcall`` ``type.__call__`` optimieren, das üblicherweise " +"eine neue Instanz von *type* zurückgibt." #: ../../c-api/typeobj.rst:2518 msgid "" "As with any vectorcall function, if ``tp_vectorcall`` is ``NULL``, the " "*tp_call* protocol (``Py_TYPE(type)->tp_call``) is used instead." msgstr "" +"Wie bei jeder vectorcall-Funktion wird, wenn ``tp_vectorcall`` ``NULL`` ist, " +"stattdessen das *tp_call*-Protokoll (``Py_TYPE(type)->tp_call``) verwendet." #: ../../c-api/typeobj.rst:2523 msgid "" @@ -3819,26 +5038,35 @@ msgid "" "that ``type->tp_vectorcall`` must match the behavior of ``Py_TYPE(type)-" ">tp_call``." msgstr "" +"Das :ref:`vectorcall-Protokoll ` verlangt, dass die vectorcall-" +"Funktion sich genauso verhält wie das zugehörige ``tp_call``. Das bedeutet, " +"dass ``type->tp_vectorcall`` zum Verhalten von ``Py_TYPE(type)->tp_call`` " +"passen muss." #: ../../c-api/typeobj.rst:2528 msgid "" "Specifically, if *type* uses the default metaclass, ``type->tp_vectorcall`` " "must behave the same as :c:expr:`PyType_Type->tp_call`, which:" msgstr "" +"Verwendet *type* die voreingestellte Metaklasse, muss sich ``type-" +">tp_vectorcall`` insbesondere genauso verhalten wie :c:expr:`PyType_Type-" +">tp_call`, das:" #: ../../c-api/typeobj.rst:2532 msgid "calls ``type->tp_new``," -msgstr "" +msgstr "``type->tp_new`` aufruft," #: ../../c-api/typeobj.rst:2534 msgid "" "if the result is a subclass of *type*, calls ``type->tp_init`` on the result " "of ``tp_new``, and" msgstr "" +"``type->tp_init`` auf dem Ergebnis von ``tp_new`` aufruft, wenn das Ergebnis " +"eine Unterklasse von *type* ist, und" #: ../../c-api/typeobj.rst:2537 msgid "returns the result of ``tp_new``." -msgstr "" +msgstr "das Ergebnis von ``tp_new`` zurückgibt." #: ../../c-api/typeobj.rst:2539 msgid "" @@ -3848,22 +5076,28 @@ msgid "" "types, note that both can be overridden (using :py:func:`~object.__new__` " "and :py:func:`~object.__init__`, respectively)." msgstr "" +"Üblicherweise wird ``tp_vectorcall`` übergangen, um diesen Ablauf für " +"bestimmte :c:member:`~PyTypeObject.tp_new` " +"und :c:member:`~PyTypeObject.tp_init` zu optimieren. Tust du das bei Typen, " +"von denen Nutzer Unterklassen bilden können, beachte, dass beide übergangen " +"werden können (über :py:func:`~object.__new__` " +"beziehungsweise :py:func:`~object.__init__`)." #: ../../c-api/typeobj.rst:2550 msgid "This field is never inherited." -msgstr "" +msgstr "Dieses Feld wird nie vererbt." #: ../../c-api/typeobj.rst:2552 msgid "(the field exists since 3.8 but it's only used since 3.9)" -msgstr "" +msgstr "(das Feld gibt es seit 3.8, verwendet wird es aber erst seit 3.9)" #: ../../c-api/typeobj.rst:2557 msgid "Internal. Do not use." -msgstr "" +msgstr "Intern. Nicht verwenden." #: ../../c-api/typeobj.rst:2565 msgid "Static Types" -msgstr "" +msgstr "Statische Typen" #: ../../c-api/typeobj.rst:2567 msgid "" @@ -3871,23 +5105,33 @@ msgid "" "static :c:type:`PyTypeObject` structure is defined directly in code and " "initialized using :c:func:`PyType_Ready`." msgstr "" +"Herkömmlich sind Typen, die in C-Code festgelegt werden, *statisch*, das " +"heißt: Eine statische :c:type:`PyTypeObject`-Struktur wird unmittelbar im " +"Code festgelegt und über :c:func:`PyType_Ready` initialisiert." #: ../../c-api/typeobj.rst:2571 msgid "" "This results in types that are limited relative to types defined in Python:" msgstr "" +"Daraus ergeben sich Typen, die gegenüber in Python festgelegten Typen " +"eingeschränkt sind:" #: ../../c-api/typeobj.rst:2573 msgid "" "Static types are limited to one base, i.e. they cannot use multiple " "inheritance." msgstr "" +"Statische Typen sind auf einen Basistyp beschränkt, können also keine " +"Mehrfachvererbung nutzen." #: ../../c-api/typeobj.rst:2575 msgid "" "Static type objects (but not necessarily their instances) are immutable. It " "is not possible to add or modify the type object's attributes from Python." msgstr "" +"Statische Typobjekte (nicht unbedingt aber ihre Instanzen) sind " +"unveränderlich. Die Attribute des Typobjekts lassen sich aus Python heraus " +"weder hinzufügen noch ändern." #: ../../c-api/typeobj.rst:2577 msgid "" @@ -3895,6 +5139,9 @@ msgid "" "interpreter-support>`, so they should not include any subinterpreter-" "specific state." msgstr "" +"Statische Typobjekte werden von allen :ref:`Unterinterpretern ` gemeinsam genutzt, sie sollten deshalb keinen Zustand " +"enthalten, der einem einzelnen Unterinterpreter eigen ist." #: ../../c-api/typeobj.rst:2581 msgid "" @@ -3902,10 +5149,14 @@ msgid "" "` as an opaque struct, any extension modules using static " "types must be compiled for a specific Python minor version." msgstr "" +"Da :c:type:`PyTypeObject` außerdem nur als undurchsichtige Struktur Teil " +"der :ref:`Limited API ` ist, müssen Erweiterungsmodule, die " +"statische Typen verwenden, für eine bestimmte Python-Nebenversion kompiliert " +"werden." #: ../../c-api/typeobj.rst:2589 msgid "Heap Types" -msgstr "" +msgstr "Heap-Typen" #: ../../c-api/typeobj.rst:2591 msgid "" @@ -3914,6 +5165,10 @@ msgid "" "created by Python's ``class`` statement. Heap types have " "the :c:macro:`Py_TPFLAGS_HEAPTYPE` flag set." msgstr "" +"Eine Alternative zu :ref:`statischen Typen ` sind *auf dem " +"Heap angelegte Typen*, kurz *Heap-Typen*, die den Klassen, die Pythons " +"``class``-Anweisung erzeugt, sehr nahekommen. Bei Heap-Typen ist das " +"Flag :c:macro:`Py_TPFLAGS_HEAPTYPE` gesetzt." #: ../../c-api/typeobj.rst:2596 msgid "" @@ -3921,10 +5176,13 @@ msgid "" "calling :c:func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases`, :c:func:`PyType_FromModuleAndSpec`, " "or :c:func:`PyType_FromMetaclass`." msgstr "" +"Das geschieht, indem eine :c:type:`PyType_Spec`-Struktur gefüllt " +"und :c:func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases`, :c:func:`PyType_FromModuleAndSpec` " +"oder :c:func:`PyType_FromMetaclass` aufgerufen wird." #: ../../c-api/typeobj.rst:2604 msgid "Number Object Structures" -msgstr "" +msgstr "Strukturen für Zahlenobjekte" #: ../../c-api/typeobj.rst:2608 msgid "" @@ -3932,10 +5190,13 @@ msgid "" "implement the number protocol. Each function is used by the function of " "similar name documented in the :ref:`number` section." msgstr "" +"Diese Struktur enthält Zeiger auf die Funktionen, über die ein Objekt das " +"Zahlenprotokoll umsetzt. Jede Funktion wird von der gleichnamigen Funktion " +"verwendet, die im Abschnitt :ref:`number` dokumentiert ist." #: ../../c-api/typeobj.rst:2614 ../../c-api/typeobj.rst:3086 msgid "Here is the structure definition::" -msgstr "" +msgstr "Hier die Strukturdefinition::" #: ../../c-api/typeobj.rst:2616 msgid "" @@ -3982,6 +5243,48 @@ msgid "" " binaryfunc nb_inplace_matrix_multiply;\n" "} PyNumberMethods;" msgstr "" +"typedef struct {\n" +" binaryfunc nb_add;\n" +" binaryfunc nb_subtract;\n" +" binaryfunc nb_multiply;\n" +" binaryfunc nb_remainder;\n" +" binaryfunc nb_divmod;\n" +" ternaryfunc nb_power;\n" +" unaryfunc nb_negative;\n" +" unaryfunc nb_positive;\n" +" unaryfunc nb_absolute;\n" +" inquiry nb_bool;\n" +" unaryfunc nb_invert;\n" +" binaryfunc nb_lshift;\n" +" binaryfunc nb_rshift;\n" +" binaryfunc nb_and;\n" +" binaryfunc nb_xor;\n" +" binaryfunc nb_or;\n" +" unaryfunc nb_int;\n" +" void *nb_reserved;\n" +" unaryfunc nb_float;\n" +"\n" +" binaryfunc nb_inplace_add;\n" +" binaryfunc nb_inplace_subtract;\n" +" binaryfunc nb_inplace_multiply;\n" +" binaryfunc nb_inplace_remainder;\n" +" ternaryfunc nb_inplace_power;\n" +" binaryfunc nb_inplace_lshift;\n" +" binaryfunc nb_inplace_rshift;\n" +" binaryfunc nb_inplace_and;\n" +" binaryfunc nb_inplace_xor;\n" +" binaryfunc nb_inplace_or;\n" +"\n" +" binaryfunc nb_floor_divide;\n" +" binaryfunc nb_true_divide;\n" +" binaryfunc nb_inplace_floor_divide;\n" +" binaryfunc nb_inplace_true_divide;\n" +"\n" +" unaryfunc nb_index;\n" +"\n" +" binaryfunc nb_matrix_multiply;\n" +" binaryfunc nb_inplace_matrix_multiply;\n" +"} PyNumberMethods;" #: ../../c-api/typeobj.rst:2661 msgid "" @@ -3992,6 +5295,12 @@ msgid "" "``Py_NotImplemented``, if another error occurred they must return ``NULL`` " "and set an exception." msgstr "" +"Binäre und ternäre Funktionen müssen den Typ all ihrer Operanden prüfen und " +"die nötigen Umwandlungen vornehmen (mindestens einer der Operanden ist eine " +"Instanz des festgelegten Typs). Ist der Vorgang für die gegebenen Operanden " +"nicht festgelegt, müssen binäre und ternäre Funktionen ``Py_NotImplemented`` " +"zurückgeben. Trat ein anderer Fehler auf, müssen sie ``NULL`` zurückgeben " +"und eine Ausnahme setzen." #: ../../c-api/typeobj.rst:2670 msgid "" @@ -3999,16 +5308,21 @@ msgid "" "``NULL``. It was previously called :c:member:`!nb_long`, and was renamed in " "Python 3.0.1." msgstr "" +"Das Feld :c:member:`~PyNumberMethods.nb_reserved` sollte immer ``NULL`` " +"sein. Es hieß früher :c:member:`!nb_long` und wurde in Python 3.0.1 " +"umbenannt." #: ../../c-api/typeobj.rst:2821 msgid "Mapping Object Structures" -msgstr "" +msgstr "Strukturen für Mapping-Objekte" #: ../../c-api/typeobj.rst:2825 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the mapping protocol. It has three members:" msgstr "" +"Diese Struktur enthält Zeiger auf die Funktionen, über die ein Objekt das " +"Mapping-Protokoll umsetzt. Sie hat drei Member:" #: ../../c-api/typeobj.rst:2832 msgid "" @@ -4016,6 +5330,9 @@ msgid "" "and :c:func:`PyObject_Size`, and has the same signature. This slot may be " "set to ``NULL`` if the object has no defined length." msgstr "" +"Diese Funktion wird von :c:func:`PyMapping_Size` und :c:func:`PyObject_Size` " +"verwendet und hat dieselbe Signatur. Dieser Slot darf auf ``NULL`` gesetzt " +"werden, wenn das Objekt keine festgelegte Länge hat." #: ../../c-api/typeobj.rst:2840 msgid "" @@ -4025,6 +5342,11 @@ msgid "" "the :c:func:`PyMapping_Check` function to return ``1``, it can be ``NULL`` " "otherwise." msgstr "" +"Diese Funktion wird von :c:func:`PyObject_GetItem` " +"und :c:func:`PySequence_GetSlice` verwendet und hat dieselbe Signatur " +"wie :c:func:`!PyObject_GetItem`. Dieser Slot muss gefüllt sein, damit die " +"Funktion :c:func:`PyMapping_Check` ``1`` zurückgibt. Andernfalls darf er " +"``NULL`` sein." #: ../../c-api/typeobj.rst:2850 msgid "" @@ -4035,16 +5357,24 @@ msgid "" "If this slot is ``NULL``, the object does not support item assignment and " "deletion." msgstr "" +"Diese Funktion wird " +"von :c:func:`PyObject_SetItem`, :c:func:`PyObject_DelItem`, :c:func:`PySequence_SetSlice` " +"und :c:func:`PySequence_DelSlice` verwendet. Sie hat dieselbe Signatur " +"wie :c:func:`!PyObject_SetItem`, *v* darf aber auch auf ``NULL`` gesetzt " +"werden, um ein Element zu löschen. Ist dieser Slot ``NULL``, unterstützt das " +"Objekt das Zuweisen und Löschen von Elementen nicht." #: ../../c-api/typeobj.rst:2861 msgid "Sequence Object Structures" -msgstr "" +msgstr "Strukturen für Sequenzobjekte" #: ../../c-api/typeobj.rst:2865 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the sequence protocol." msgstr "" +"Diese Struktur enthält Zeiger auf die Funktionen, über die ein Objekt das " +"Sequenzprotokoll umsetzt." #: ../../c-api/typeobj.rst:2872 msgid "" @@ -4053,6 +5383,11 @@ msgid "" "for handling negative indices via the :c:member:`~PySequenceMethods.sq_item` " "and the :c:member:`~PySequenceMethods.sq_ass_item` slots." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_Size` " +"und :c:func:`PyObject_Size` verwendet und hat dieselbe Signatur. Sie dient " +"außerdem dem Umgang mit negativen Indizes über die " +"Slots :c:member:`~PySequenceMethods.sq_item` " +"und :c:member:`~PySequenceMethods.sq_ass_item`." #: ../../c-api/typeobj.rst:2881 msgid "" @@ -4060,6 +5395,10 @@ msgid "" "signature. It is also used by the ``+`` operator, after trying the numeric " "addition via the :c:member:`~PyNumberMethods.nb_add` slot." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_Concat` verwendet und hat " +"dieselbe Signatur. Sie wird außerdem vom Operator ``+`` verwendet, nachdem " +"die numerische Addition über den Slot :c:member:`~PyNumberMethods.nb_add` " +"versucht wurde." #: ../../c-api/typeobj.rst:2889 msgid "" @@ -4067,6 +5406,10 @@ msgid "" "signature. It is also used by the ``*`` operator, after trying numeric " "multiplication via the :c:member:`~PyNumberMethods.nb_multiply` slot." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_Repeat` verwendet und hat " +"dieselbe Signatur. Sie wird außerdem vom Operator ``*`` verwendet, nachdem " +"die numerische Multiplikation über den " +"Slot :c:member:`~PyNumberMethods.nb_multiply` versucht wurde." #: ../../c-api/typeobj.rst:2897 msgid "" @@ -4076,6 +5419,12 @@ msgid "" "slot must be filled for the :c:func:`PySequence_Check` function to return " "``1``, it can be ``NULL`` otherwise." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_GetItem` verwendet und hat " +"dieselbe Signatur. Sie wird außerdem von :c:func:`PyObject_GetItem` " +"verwendet, nachdem der Indexzugriff über den " +"Slot :c:member:`~PyMappingMethods.mp_subscript` versucht wurde. Dieser Slot " +"muss gefüllt sein, damit die Funktion :c:func:`PySequence_Check` ``1`` " +"zurückgibt. Andernfalls darf er ``NULL`` sein." #: ../../c-api/typeobj.rst:2903 msgid "" @@ -4085,6 +5434,11 @@ msgid "" "to :c:member:`~PySequenceMethods.sq_item`. If :c:member:`!sq_length` is " "``NULL``, the index is passed as is to the function." msgstr "" +"Mit negativen Indizes wird so umgegangen: Ist der " +"Slot :c:member:`~PySequenceMethods.sq_length` gefüllt, wird er aufgerufen, " +"und über die Länge der Sequenz wird ein positiver Index berechnet, der " +"an :c:member:`~PySequenceMethods.sq_item` übergeben wird. Ist :c:member:`!" +"sq_length` ``NULL``, wird der Index unverändert an die Funktion übergeben." #: ../../c-api/typeobj.rst:2912 msgid "" @@ -4095,6 +5449,12 @@ msgid "" "slot may be left to ``NULL`` if the object does not support item assignment " "and deletion." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_SetItem` verwendet und hat " +"dieselbe Signatur. Sie wird außerdem von :c:func:`PyObject_SetItem` " +"und :c:func:`PyObject_DelItem` verwendet, nachdem das Zuweisen und Löschen " +"von Elementen über den Slot :c:member:`~PyMappingMethods.mp_ass_subscript` " +"versucht wurde. Dieser Slot darf ``NULL`` bleiben, wenn das Objekt das " +"Zuweisen und Löschen von Elementen nicht unterstützt." #: ../../c-api/typeobj.rst:2923 msgid "" @@ -4102,6 +5462,10 @@ msgid "" "signature. This slot may be left to ``NULL``, in this case :c:func:`!" "PySequence_Contains` simply traverses the sequence until it finds a match." msgstr "" +"Diese Funktion kann von :c:func:`PySequence_Contains` verwendet werden und " +"hat dieselbe Signatur. Dieser Slot darf ``NULL`` bleiben. In diesem Fall " +"durchläuft :c:func:`!PySequence_Contains` die Sequenz einfach, bis es eine " +"Übereinstimmung findet." #: ../../c-api/typeobj.rst:2932 msgid "" @@ -4112,6 +5476,13 @@ msgid "" "augmented assignment ``+=``, after trying numeric in-place addition via " "the :c:member:`~PyNumberMethods.nb_inplace_add` slot." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_InPlaceConcat` verwendet und hat " +"dieselbe Signatur. Sie sollte ihren ersten Operanden ändern und zurückgeben. " +"Dieser Slot darf ``NULL`` bleiben. In diesem Fall fällt :c:func:`!" +"PySequence_InPlaceConcat` auf :c:func:`PySequence_Concat` zurück. Sie wird " +"außerdem von der erweiterten Zuweisung ``+=`` verwendet, nachdem die " +"numerische Addition an Ort und Stelle über den " +"Slot :c:member:`~PyNumberMethods.nb_inplace_add` versucht wurde." #: ../../c-api/typeobj.rst:2943 msgid "" @@ -4122,10 +5493,17 @@ msgid "" "augmented assignment ``*=``, after trying numeric in-place multiplication " "via the :c:member:`~PyNumberMethods.nb_inplace_multiply` slot." msgstr "" +"Diese Funktion wird von :c:func:`PySequence_InPlaceRepeat` verwendet und hat " +"dieselbe Signatur. Sie sollte ihren ersten Operanden ändern und zurückgeben. " +"Dieser Slot darf ``NULL`` bleiben. In diesem Fall fällt :c:func:`!" +"PySequence_InPlaceRepeat` auf :c:func:`PySequence_Repeat` zurück. Sie wird " +"außerdem von der erweiterten Zuweisung ``*=`` verwendet, nachdem die " +"numerische Multiplikation an Ort und Stelle über den " +"Slot :c:member:`~PyNumberMethods.nb_inplace_multiply` versucht wurde." #: ../../c-api/typeobj.rst:2954 msgid "Buffer Object Structures" -msgstr "" +msgstr "Strukturen für Pufferobjekte" #: ../../c-api/typeobj.rst:2958 msgid "" @@ -4133,16 +5511,20 @@ msgid "" "protocol `. The protocol defines how an exporter object can " "expose its internal data to consumer objects." msgstr "" +"Diese Struktur enthält Zeiger auf die Funktionen, die das :ref:`Puffer-" +"Protokoll ` verlangt. Das Protokoll legt fest, wie ein " +"exportierendes Objekt seine internen Daten für verbrauchende Objekte " +"zugänglich machen kann." #: ../../c-api/typeobj.rst:2966 ../../c-api/typeobj.rst:3035 #: ../../c-api/typeobj.rst:3099 ../../c-api/typeobj.rst:3112 #: ../../c-api/typeobj.rst:3126 ../../c-api/typeobj.rst:3138 msgid "The signature of this function is::" -msgstr "" +msgstr "Die Signatur dieser Funktion lautet::" #: ../../c-api/typeobj.rst:2968 msgid "int (PyObject *exporter, Py_buffer *view, int flags);" -msgstr "" +msgstr "int (PyObject *exporter, Py_buffer *view, int flags);" #: ../../c-api/typeobj.rst:2970 msgid "" @@ -4150,46 +5532,55 @@ msgid "" "Except for point (3), an implementation of this function MUST take these " "steps:" msgstr "" +"Behandelt eine Anfrage an *exporter*, *view* so zu füllen, wie *flags* es " +"angibt. Abgesehen von Punkt (3) MUSS eine Umsetzung dieser Funktion diese " +"Schritte ausführen:" #: ../../c-api/typeobj.rst:2974 msgid "" "Check if the request can be met. If not, raise :exc:`BufferError`, set " "``view->obj`` to ``NULL`` and return ``-1``." msgstr "" +"Prüfen, ob die Anfrage erfüllt werden kann. Wenn nicht, :exc:`BufferError` " +"auslösen, ``view->obj`` auf ``NULL`` setzen und ``-1`` zurückgeben." #: ../../c-api/typeobj.rst:2977 msgid "Fill in the requested fields." -msgstr "" +msgstr "Die angefragten Felder füllen." #: ../../c-api/typeobj.rst:2979 msgid "Increment an internal counter for the number of exports." -msgstr "" +msgstr "Einen internen Zähler für die Anzahl der Exporte erhöhen." #: ../../c-api/typeobj.rst:2981 msgid "Set ``view->obj`` to *exporter* and increment ``view->obj``." -msgstr "" +msgstr "``view->obj`` auf *exporter* setzen und ``view->obj`` erhöhen." #: ../../c-api/typeobj.rst:2983 msgid "Return ``0``." -msgstr "" +msgstr "``0`` zurückgeben." #: ../../c-api/typeobj.rst:2985 ../../c-api/typeobj.rst:3048 msgid "**Thread safety:**" -msgstr "" +msgstr "**Thread-Sicherheit:**" #: ../../c-api/typeobj.rst:2987 msgid "In the :term:`free-threaded build`, implementations must ensure:" msgstr "" +"Im :term:`Build mit freien Threads ` müssen Umsetzungen " +"sicherstellen:" #: ../../c-api/typeobj.rst:2989 msgid "The export counter increment in step (3) is atomic." -msgstr "" +msgstr "Das Erhöhen des Exportzählers in Schritt (3) ist atomar." #: ../../c-api/typeobj.rst:2991 msgid "" "The underlying buffer data remains valid and at a stable memory location for " "the lifetime of all exports." msgstr "" +"Die zugrunde liegenden Pufferdaten bleiben gültig und an einer " +"unveränderlichen Speicherstelle, solange Exporte bestehen." #: ../../c-api/typeobj.rst:2994 msgid "" @@ -4197,34 +5588,46 @@ msgid "" "as :class:`bytearray`), the export counter is checked atomically before such " "operations, and :exc:`BufferError` is raised if exports exist." msgstr "" +"Bei Objekten, die sich in der Größe ändern oder neu belegen lassen " +"(wie :class:`bytearray`), wird der Exportzähler vor solchen Vorgängen atomar " +"geprüft, und es wird :exc:`BufferError` ausgelöst, wenn Exporte bestehen." #: ../../c-api/typeobj.rst:2998 msgid "The function is safe to call concurrently from multiple threads." msgstr "" +"Die Funktion lässt sich sicher gleichzeitig aus mehreren Threads aufrufen." #: ../../c-api/typeobj.rst:3000 msgid "" "See also :ref:`thread-safety-memoryview` for the Python-level thread safety " "guarantees of :class:`memoryview` objects." msgstr "" +"Siehe auch :ref:`thread-safety-memoryview` zu den Zusagen zur Thread-" +"Sicherheit von :class:`memoryview`-Objekten auf Python-Ebene." #: ../../c-api/typeobj.rst:3003 msgid "" "If *exporter* is part of a chain or tree of buffer providers, two main " "schemes can be used:" msgstr "" +"Ist *exporter* Teil einer Kette oder eines Baums von Pufferanbietern, sind " +"zwei grundlegende Vorgehensweisen möglich:" #: ../../c-api/typeobj.rst:3006 msgid "" "Re-export: Each member of the tree acts as the exporting object and sets " "``view->obj`` to a new reference to itself." msgstr "" +"Weiterexport: Jedes Mitglied des Baums tritt als exportierendes Objekt auf " +"und setzt ``view->obj`` auf eine neue Referenz auf sich selbst." #: ../../c-api/typeobj.rst:3009 msgid "" "Redirect: The buffer request is redirected to the root object of the tree. " "Here, ``view->obj`` will be a new reference to the root object." msgstr "" +"Umleitung: Die Pufferanfrage wird an das Wurzelobjekt des Baums umgeleitet. " +"Hier ist ``view->obj`` eine neue Referenz auf das Wurzelobjekt." #: ../../c-api/typeobj.rst:3013 msgid "" @@ -4233,6 +5636,10 @@ msgid "" "specific requests are in section :ref:`Buffer request types `." msgstr "" +"Die einzelnen Felder von *view* sind im Abschnitt :ref:`Pufferstruktur " +"` beschrieben, die Regeln, wie ein Exporteur auf bestimmte " +"Anfragen reagieren muss, stehen im Abschnitt :ref:`Arten von Pufferanfragen " +"`." #: ../../c-api/typeobj.rst:3018 msgid "" @@ -4241,22 +5648,31 @@ msgid "" "left. :c:member:`~Py_buffer.format`, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer.strides`, :c:member:`~Py_buffer.suboffsets` " "and :c:member:`~Py_buffer.internal` are read-only for the consumer." msgstr "" +"Aller Speicher, auf den die Struktur :c:type:`Py_buffer` zeigt, gehört dem " +"Exporteur und muss gültig bleiben, solange noch Verbraucher vorhanden " +"sind. :c:member:`~Py_buffer.format`, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer.strides`, :c:member:`~Py_buffer.suboffsets` " +"und :c:member:`~Py_buffer.internal` sind für den Verbraucher nur lesbar." #: ../../c-api/typeobj.rst:3025 msgid "" ":c:func:`PyBuffer_FillInfo` provides an easy way of exposing a simple bytes " "buffer while dealing correctly with all request types." msgstr "" +":c:func:`PyBuffer_FillInfo` bietet einen einfachen Weg, einen schlichten " +"Bytes-Puffer zugänglich zu machen und dabei alle Arten von Anfragen richtig " +"zu behandeln." #: ../../c-api/typeobj.rst:3028 msgid "" ":c:func:`PyObject_GetBuffer` is the interface for the consumer that wraps " "this function." msgstr "" +":c:func:`PyObject_GetBuffer` ist die Schnittstelle für den Verbraucher, die " +"diese Funktion umhüllt." #: ../../c-api/typeobj.rst:3037 msgid "void (PyObject *exporter, Py_buffer *view);" -msgstr "" +msgstr "void (PyObject *exporter, Py_buffer *view);" #: ../../c-api/typeobj.rst:3039 msgid "" @@ -4265,22 +5681,27 @@ msgid "" "``NULL``. Otherwise, a standard implementation of this function will take " "these optional steps:" msgstr "" +"Behandelt eine Anfrage, die Ressourcen des Puffers freizugeben. Müssen keine " +"Ressourcen freigegeben werden, " +"darf :c:member:`PyBufferProcs.bf_releasebuffer` ``NULL`` sein. Andernfalls " +"führt eine gewöhnliche Umsetzung dieser Funktion diese wahlfreien Schritte " +"aus:" #: ../../c-api/typeobj.rst:3044 msgid "Decrement an internal counter for the number of exports." -msgstr "" +msgstr "Einen internen Zähler für die Anzahl der Exporte verringern." #: ../../c-api/typeobj.rst:3046 msgid "If the counter is ``0``, free all memory associated with *view*." -msgstr "" +msgstr "Ist der Zähler ``0``, allen zu *view* gehörenden Speicher freigeben." #: ../../c-api/typeobj.rst:3050 msgid "In the :term:`free-threaded build`:" -msgstr "" +msgstr "Im :term:`Build mit freien Threads `:" #: ../../c-api/typeobj.rst:3052 msgid "The export counter decrement in step (1) must be atomic." -msgstr "" +msgstr "Das Verringern des Exportzählers in Schritt (1) muss atomar sein." #: ../../c-api/typeobj.rst:3054 msgid "" @@ -4288,6 +5709,10 @@ msgid "" "the final release may race with concurrent releases from other threads and " "deallocation must only happen once." msgstr "" +"Das Aufräumen der Ressourcen, wenn der Zähler null erreicht, muss atomar " +"geschehen, weil die letzte Freigabe mit gleichzeitigen Freigaben anderer " +"Threads um die Wette laufen kann und die Speicherfreigabe nur ein einziges " +"Mal geschehen darf." #: ../../c-api/typeobj.rst:3058 msgid "" @@ -4296,6 +5721,10 @@ msgid "" "constant, while a consumer MAY pass a copy of the original buffer as the " "*view* argument." msgstr "" +"Der Exporteur MUSS das Feld :c:member:`~Py_buffer.internal` verwenden, um " +"pufferspezifische Ressourcen zu verfolgen. Dieses Feld bleibt zugesichert " +"unverändert, während ein Verbraucher dem Argument *view* eine Kopie des " +"ursprünglichen Puffers übergeben DARF." #: ../../c-api/typeobj.rst:3064 msgid "" @@ -4303,22 +5732,30 @@ msgid "" "automatically in :c:func:`PyBuffer_Release` (this scheme is useful for " "breaking reference cycles)." msgstr "" +"Diese Funktion DARF ``view->obj`` NICHT verringern, weil das " +"in :c:func:`PyBuffer_Release` automatisch geschieht (diese Vorgehensweise " +"ist nützlich, um Referenzzyklen aufzubrechen)." #: ../../c-api/typeobj.rst:3069 msgid "" ":c:func:`PyBuffer_Release` is the interface for the consumer that wraps this " "function." msgstr "" +":c:func:`PyBuffer_Release` ist die Schnittstelle für den Verbraucher, die " +"diese Funktion umhüllt." #: ../../c-api/typeobj.rst:3077 msgid "Async Object Structures" -msgstr "" +msgstr "Strukturen für Async-Objekte" #: ../../c-api/typeobj.rst:3083 msgid "" "This structure holds pointers to the functions required to " "implement :term:`awaitable` and :term:`asynchronous iterator` objects." msgstr "" +"Diese Struktur enthält Zeiger auf die Funktionen, die nötig sind, " +"um :term:`abwartbare ` Objekte und :term:`asynchrone Iteratoren " +"` umzusetzen." #: ../../c-api/typeobj.rst:3088 msgid "" @@ -4329,60 +5766,81 @@ msgid "" " sendfunc am_send;\n" "} PyAsyncMethods;" msgstr "" +"typedef struct {\n" +" unaryfunc am_await;\n" +" unaryfunc am_aiter;\n" +" unaryfunc am_anext;\n" +" sendfunc am_send;\n" +"} PyAsyncMethods;" #: ../../c-api/typeobj.rst:3101 msgid "PyObject *am_await(PyObject *self);" -msgstr "" +msgstr "PyObject *am_await(PyObject *self);" #: ../../c-api/typeobj.rst:3103 msgid "" "The returned object must be an :term:`iterator`, i.e. :c:func:`PyIter_Check` " "must return ``1`` for it." msgstr "" +"Das zurückgegebene Objekt muss ein :term:`Iterator ` " +"sein, :c:func:`PyIter_Check` muss dafür also ``1`` zurückgeben." #: ../../c-api/typeobj.rst:3106 msgid "" "This slot may be set to ``NULL`` if an object is not an :term:`awaitable`." msgstr "" +"Dieser Slot darf auf ``NULL`` gesetzt werden, wenn ein Objekt " +"nicht :term:`abwartbar ` ist." #: ../../c-api/typeobj.rst:3114 msgid "PyObject *am_aiter(PyObject *self);" -msgstr "" +msgstr "PyObject *am_aiter(PyObject *self);" #: ../../c-api/typeobj.rst:3116 msgid "" "Must return an :term:`asynchronous iterator` object. " "See :meth:`~object.__anext__` for details." msgstr "" +"Muss ein Objekt zurückgeben, das ein :term:`asynchroner Iterator " +"` ist. Einzelheiten stehen " +"unter :meth:`~object.__anext__`." #: ../../c-api/typeobj.rst:3119 msgid "" "This slot may be set to ``NULL`` if an object does not implement " "asynchronous iteration protocol." msgstr "" +"Dieser Slot darf auf ``NULL`` gesetzt werden, wenn ein Objekt das Protokoll " +"für asynchrone Iteration nicht umsetzt." #: ../../c-api/typeobj.rst:3128 msgid "PyObject *am_anext(PyObject *self);" -msgstr "" +msgstr "PyObject *am_anext(PyObject *self);" #: ../../c-api/typeobj.rst:3130 msgid "" "Must return an :term:`awaitable` object. See :meth:`~object.__anext__` for " "details. This slot may be set to ``NULL``." msgstr "" +"Muss ein :term:`abwartbares ` Objekt zurückgeben. Einzelheiten " +"stehen unter :meth:`~object.__anext__`. Dieser Slot darf auf ``NULL`` " +"gesetzt werden." #: ../../c-api/typeobj.rst:3140 msgid "PySendResult am_send(PyObject *self, PyObject *arg, PyObject **result);" msgstr "" +"PySendResult am_send(PyObject *self, PyObject *arg, PyObject **result);" #: ../../c-api/typeobj.rst:3142 msgid "" "See :c:func:`PyIter_Send` for details. This slot may be set to ``NULL``." msgstr "" +"Einzelheiten stehen unter :c:func:`PyIter_Send`. Dieser Slot darf auf " +"``NULL`` gesetzt werden." #: ../../c-api/typeobj.rst:3151 msgid "Slot Type typedefs" -msgstr "" +msgstr "Typedefs für Slot-Typen" #: ../../c-api/typeobj.rst:3155 msgid "" @@ -4398,6 +5856,17 @@ msgid "" "``sizeof(void*)``; otherwise, *nitems* is not used and the length of the " "block should be :c:member:`~PyTypeObject.tp_basicsize`." msgstr "" +"Diese Funktion soll die Speicherbelegung von der Speicherinitialisierung " +"trennen. Sie sollte einen Zeiger auf einen Speicherblock zurückgeben, der " +"für die Instanz lang genug und passend ausgerichtet und mit Nullen " +"initialisiert ist, bei dem aber :c:member:`~PyObject.ob_refcnt` auf ``1`` " +"und :c:member:`~PyObject.ob_type` auf das Typargument gesetzt ist. " +"Ist :c:member:`~PyTypeObject.tp_itemsize` des Typs ungleich null, sollte das " +"Feld :c:member:`~PyVarObject.ob_size` des Objekts mit *nitems* initialisiert " +"werden, und die Länge des belegten Speicherblocks sollte ``tp_basicsize + " +"nitems*tp_itemsize`` sein, aufgerundet auf ein Vielfaches von " +"``sizeof(void*)``. Andernfalls wird *nitems* nicht verwendet, und die Länge " +"des Blocks sollte :c:member:`~PyTypeObject.tp_basicsize` sein." #: ../../c-api/typeobj.rst:3165 msgid "" @@ -4405,72 +5874,77 @@ msgid "" "allocate additional memory; that should be done " "by :c:member:`~PyTypeObject.tp_new`." msgstr "" +"Diese Funktion sollte keine weitere Initialisierung der Instanz vornehmen, " +"auch keinen zusätzlichen Speicher belegen. Das " +"sollte :c:member:`~PyTypeObject.tp_new` erledigen." #: ../../c-api/typeobj.rst:3172 msgid "See :c:member:`~PyTypeObject.tp_free`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_free`." #: ../../c-api/typeobj.rst:3176 msgid "See :c:member:`~PyTypeObject.tp_new`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_new`." #: ../../c-api/typeobj.rst:3180 msgid "See :c:member:`~PyTypeObject.tp_init`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_init`." #: ../../c-api/typeobj.rst:3184 msgid "See :c:member:`~PyTypeObject.tp_repr`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_repr`." #: ../../c-api/typeobj.rst:3188 ../../c-api/typeobj.rst:3197 msgid "Return the value of the named attribute for the object." -msgstr "" +msgstr "Gibt den Wert des benannten Attributs des Objekts zurück." #: ../../c-api/typeobj.rst:3192 ../../c-api/typeobj.rst:3203 msgid "" "Set the value of the named attribute for the object. The value argument is " "set to ``NULL`` to delete the attribute." msgstr "" +"Setzt den Wert des benannten Attributs des Objekts. Das Argument für den " +"Wert wird auf ``NULL`` gesetzt, um das Attribut zu löschen." #: ../../c-api/typeobj.rst:3199 msgid "See :c:member:`~PyTypeObject.tp_getattro`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_getattro`." #: ../../c-api/typeobj.rst:3206 msgid "See :c:member:`~PyTypeObject.tp_setattro`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_setattro`." #: ../../c-api/typeobj.rst:3210 msgid "See :c:member:`~PyTypeObject.tp_descr_get`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_descr_get`." #: ../../c-api/typeobj.rst:3214 msgid "See :c:member:`~PyTypeObject.tp_descr_set`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_descr_set`." #: ../../c-api/typeobj.rst:3218 msgid "See :c:member:`~PyTypeObject.tp_hash`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_hash`." #: ../../c-api/typeobj.rst:3222 msgid "See :c:member:`~PyTypeObject.tp_richcompare`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_richcompare`." #: ../../c-api/typeobj.rst:3226 msgid "See :c:member:`~PyTypeObject.tp_iter`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_iter`." #: ../../c-api/typeobj.rst:3230 msgid "See :c:member:`~PyTypeObject.tp_iternext`." -msgstr "" +msgstr "Siehe :c:member:`~PyTypeObject.tp_iternext`." #: ../../c-api/typeobj.rst:3244 msgid "See :c:member:`~PyAsyncMethods.am_send`." -msgstr "" +msgstr "Siehe :c:member:`~PyAsyncMethods.am_send`." #: ../../c-api/typeobj.rst:3260 msgid "Examples" -msgstr "" +msgstr "Beispiele" #: ../../c-api/typeobj.rst:3262 msgid "" @@ -4479,10 +5953,14 @@ msgid "" "more examples, practical info, and a tutorial, see :ref:`defining-new-types` " "and :ref:`new-types-topics`." msgstr "" +"Hier einige einfache Beispiele für Python-Typdefinitionen. Sie enthalten " +"gängige Verwendungen, auf die du stoßen wirst. Manche zeigen knifflige " +"Sonderfälle. Weitere Beispiele, praktische Hinweise und eine Einführung " +"stehen unter :ref:`defining-new-types` und :ref:`new-types-topics`." #: ../../c-api/typeobj.rst:3267 msgid "A basic :ref:`static type `::" -msgstr "" +msgstr "Ein einfacher :ref:`statischer Typ `::" #: ../../c-api/typeobj.rst:3269 msgid "" @@ -4501,12 +5979,28 @@ msgid "" " .tp_repr = (reprfunc)myobj_repr,\n" "};" msgstr "" +"typedef struct {\n" +" PyObject_HEAD\n" +" const char *data;\n" +"} MyObject;\n" +"\n" +"static PyTypeObject MyObject_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" .tp_name = \"mymod.MyObject\",\n" +" .tp_basicsize = sizeof(MyObject),\n" +" .tp_doc = PyDoc_STR(\"My objects\"),\n" +" .tp_new = myobj_new,\n" +" .tp_dealloc = (destructor)myobj_dealloc,\n" +" .tp_repr = (reprfunc)myobj_repr,\n" +"};" #: ../../c-api/typeobj.rst:3284 msgid "" "You may also find older code (especially in the CPython code base) with a " "more verbose initializer::" msgstr "" +"Du wirst möglicherweise auch älteren Code finden (besonders in der CPython-" +"Codebasis), der einen ausführlicheren Initialisierer verwendet::" #: ../../c-api/typeobj.rst:3287 msgid "" @@ -4551,10 +6045,52 @@ msgid "" " myobj_new, /* tp_new */\n" "};" msgstr "" +"static PyTypeObject MyObject_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" \"mymod.MyObject\", /* tp_name */\n" +" sizeof(MyObject), /* tp_basicsize */\n" +" 0, /* tp_itemsize */\n" +" (destructor)myobj_dealloc, /* tp_dealloc */\n" +" 0, /* tp_vectorcall_offset */\n" +" 0, /* tp_getattr */\n" +" 0, /* tp_setattr */\n" +" 0, /* tp_as_async */\n" +" (reprfunc)myobj_repr, /* tp_repr */\n" +" 0, /* tp_as_number */\n" +" 0, /* tp_as_sequence */\n" +" 0, /* tp_as_mapping */\n" +" 0, /* tp_hash */\n" +" 0, /* tp_call */\n" +" 0, /* tp_str */\n" +" 0, /* tp_getattro */\n" +" 0, /* tp_setattro */\n" +" 0, /* tp_as_buffer */\n" +" 0, /* tp_flags */\n" +" PyDoc_STR(\"My objects\"), /* tp_doc */\n" +" 0, /* tp_traverse */\n" +" 0, /* tp_clear */\n" +" 0, /* tp_richcompare */\n" +" 0, /* tp_weaklistoffset */\n" +" 0, /* tp_iter */\n" +" 0, /* tp_iternext */\n" +" 0, /* tp_methods */\n" +" 0, /* tp_members */\n" +" 0, /* tp_getset */\n" +" 0, /* tp_base */\n" +" 0, /* tp_dict */\n" +" 0, /* tp_descr_get */\n" +" 0, /* tp_descr_set */\n" +" 0, /* tp_dictoffset */\n" +" 0, /* tp_init */\n" +" 0, /* tp_alloc */\n" +" myobj_new, /* tp_new */\n" +"};" #: ../../c-api/typeobj.rst:3328 msgid "A type that supports weakrefs, instance dicts, and hashing::" msgstr "" +"Ein Typ, der schwache Referenzen, Instanz-Dictionaries und Hashing " +"unterstützt::" #: ../../c-api/typeobj.rst:3330 msgid "" @@ -4581,6 +6117,28 @@ msgid "" " .tp_richcompare = PyBaseObject_Type.tp_richcompare,\n" "};" msgstr "" +"typedef struct {\n" +" PyObject_HEAD\n" +" const char *data;\n" +"} MyObject;\n" +"\n" +"static PyTypeObject MyObject_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" .tp_name = \"mymod.MyObject\",\n" +" .tp_basicsize = sizeof(MyObject),\n" +" .tp_doc = PyDoc_STR(\"My objects\"),\n" +" .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |\n" +" Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_MANAGED_DICT |\n" +" Py_TPFLAGS_MANAGED_WEAKREF,\n" +" .tp_new = myobj_new,\n" +" .tp_traverse = (traverseproc)myobj_traverse,\n" +" .tp_clear = (inquiry)myobj_clear,\n" +" .tp_alloc = PyType_GenericNew,\n" +" .tp_dealloc = (destructor)myobj_dealloc,\n" +" .tp_repr = (reprfunc)myobj_repr,\n" +" .tp_hash = (hashfunc)myobj_hash,\n" +" .tp_richcompare = PyBaseObject_Type.tp_richcompare,\n" +"};" #: ../../c-api/typeobj.rst:3353 msgid "" @@ -4588,6 +6146,10 @@ msgid "" "instances (e.g. uses a separate factory func) " "using :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag::" msgstr "" +"Eine str-Unterklasse, von der sich keine Unterklassen bilden lassen und die " +"sich nicht aufrufen lässt, um Instanzen zu erzeugen (die also zum Beispiel " +"eine eigene Fabrikfunktion verwendet), mithilfe des " +"Flags :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION`::" #: ../../c-api/typeobj.rst:3357 msgid "" @@ -4606,11 +6168,27 @@ msgid "" " .tp_repr = (reprfunc)myobj_repr,\n" "};" msgstr "" +"typedef struct {\n" +" PyUnicodeObject raw;\n" +" char *extra;\n" +"} MyStr;\n" +"\n" +"static PyTypeObject MyStr_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" .tp_name = \"mymod.MyStr\",\n" +" .tp_basicsize = sizeof(MyStr),\n" +" .tp_base = NULL, // set to &PyUnicode_Type in module init\n" +" .tp_doc = PyDoc_STR(\"my custom str\"),\n" +" .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,\n" +" .tp_repr = (reprfunc)myobj_repr,\n" +"};" #: ../../c-api/typeobj.rst:3372 msgid "" "The simplest :ref:`static type ` with fixed-length instances::" msgstr "" +"Der einfachste :ref:`statische Typ ` mit Instanzen fester " +"Länge::" #: ../../c-api/typeobj.rst:3374 msgid "" @@ -4623,12 +6201,22 @@ msgid "" " .tp_name = \"mymod.MyObject\",\n" "};" msgstr "" +"typedef struct {\n" +" PyObject_HEAD\n" +"} MyObject;\n" +"\n" +"static PyTypeObject MyObject_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" .tp_name = \"mymod.MyObject\",\n" +"};" #: ../../c-api/typeobj.rst:3383 msgid "" "The simplest :ref:`static type ` with variable-length " "instances::" msgstr "" +"Der einfachste :ref:`statische Typ ` mit Instanzen " +"veränderlicher Länge::" #: ../../c-api/typeobj.rst:3385 msgid "" @@ -4644,15 +6232,26 @@ msgid "" " .tp_itemsize = sizeof(char *),\n" "};" msgstr "" +"typedef struct {\n" +" PyObject_VAR_HEAD\n" +" const char *data[1];\n" +"} MyObject;\n" +"\n" +"static PyTypeObject MyObject_Type = {\n" +" PyVarObject_HEAD_INIT(NULL, 0)\n" +" .tp_name = \"mymod.MyObject\",\n" +" .tp_basicsize = sizeof(MyObject) - sizeof(char *),\n" +" .tp_itemsize = sizeof(char *),\n" +"};" #: ../../c-api/typeobj.rst:928 ../../c-api/typeobj.rst:995 msgid "built-in function" -msgstr "" +msgstr "eingebaute Funktion" #: ../../c-api/typeobj.rst:928 msgid "repr" -msgstr "" +msgstr "repr" #: ../../c-api/typeobj.rst:995 msgid "hash" -msgstr "" +msgstr "hash" diff --git a/glossary.po b/glossary.po index 135e5c9b..5e384f1f 100644 --- a/glossary.po +++ b/glossary.po @@ -1879,7 +1879,6 @@ msgstr "" "wird das GIL bei I/O-Operationen immer freigegeben." #: ../../glossary.rst:729 -#, fuzzy msgid "" "As of Python 3.13, the GIL can be disabled using the :option:`--disable-gil` " "build configuration. This feature enables improved performance for multi-" @@ -1887,10 +1886,7 @@ msgid "" "efficiently. For more details, see :pep:`703`." msgstr "" "Ab Python 3.13 kann der GIL mithilfe der Build-Konfiguration :option:`--" -"disable-gil` deaktiviert werden. Nach dem Kompilieren von Python mit dieser " -"Option muss der Code mit der Option :option:`-X gil=0 <-X>` ausgeführt " -"werden oder nachdem die Umgebungsvariable :envvar:`PYTHON_GIL=0 " -"` gesetzt wurde. Diese Funktion ermöglicht eine verbesserte " +"disable-gil` deaktiviert werden. Diese Funktion ermöglicht eine verbesserte " "Leistung für Multithread-Anwendungen und erleichtert die effiziente Nutzung " "von Multi-Core-CPUs. Weitere Details findest du unter :pep:`703`." diff --git a/howto/abi3t-migration.po b/howto/abi3t-migration.po index 7c6fe664..13a3d43e 100644 --- a/howto/abi3t-migration.po +++ b/howto/abi3t-migration.po @@ -501,7 +501,6 @@ msgid "Module export hook" msgstr "Export-Haken des Moduls" #: ../../howto/abi3t-migration.rst:233 -#, fuzzy msgid "" "Unless you've done this step already, your extension module defines " "a :ref:`module initialization function ` " @@ -512,9 +511,10 @@ msgid "" msgstr "" "Sofern du diesen Schritt nicht schon erledigt hast, definiert dein " "Erweiterungsmodul eine :ref:`Initialisierungsfunktion ` " -"namens :samp:`PyInit_{}`. Du musst sie auf einen :ref:`Export-" -"Haken ` portieren, :samp:`PyModExport_{}" -"` – eine Funktionalität, die in CPython 3.15 mit :pep:`793` ergänzt wurde." +"namens :samp:`PyInit_{}` (wobei ``modname`` der Name deines Moduls " +"ist). Du musst sie auf einen :ref:`Export-Haken ` " +"portieren, :samp:`PyModExport_{}` – eine Funktionalität, die in " +"CPython 3.15 mit :pep:`793` ergänzt wurde." #: ../../howto/abi3t-migration.rst:240 msgid "" diff --git a/howto/functional.po b/howto/functional.po index c020fda5..2d62fffe 100644 --- a/howto/functional.po +++ b/howto/functional.po @@ -1305,14 +1305,14 @@ msgstr "" "bilden die Eigenschaften von Generatorausdrücken nach:" #: ../../howto/functional.rst:630 -#, fuzzy msgid "" ":func:`map(f, iterA, iterB, ...) ` returns an iterator over the " "sequence ``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], " "iterB[2]), ...``." msgstr "" ":func:`map(f, iterA, iterB, ...) ` gibt einen Iterator über die Sequenz " -"zurück" +"``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), ...`` " +"zurück." #: ../../howto/functional.rst:641 msgid "You can of course achieve the same effect with a list comprehension." diff --git a/library/argparse.po b/library/argparse.po index 23f5db3d..3fe8435d 100644 --- a/library/argparse.po +++ b/library/argparse.po @@ -348,9 +348,8 @@ msgid "" msgstr "" #: ../../library/argparse.rst:221 -#, fuzzy msgid "``description``" -msgstr "Beschreibung" +msgstr "``description``" #: ../../library/argparse.rst:223 msgid "" @@ -1460,9 +1459,8 @@ msgid "" msgstr "" #: ../../library/argparse.rst:1014 -#, fuzzy msgid "``default``" -msgstr "Standard" +msgstr "``default``" #: ../../library/argparse.rst:1016 msgid "" @@ -1569,9 +1567,8 @@ msgid "" msgstr "" #: ../../library/argparse.rst:1084 -#, fuzzy msgid "``type``" -msgstr "Typ" +msgstr "``type``" #: ../../library/argparse.rst:1086 msgid "" @@ -1778,9 +1775,8 @@ msgid "" msgstr "" #: ../../library/argparse.rst:1232 -#, fuzzy msgid "``help``" -msgstr "help" +msgstr "``help``" #: ../../library/argparse.rst:1234 msgid "" diff --git a/library/time.po b/library/time.po index 511c20c0..5b6ebbda 100644 --- a/library/time.po +++ b/library/time.po @@ -242,7 +242,6 @@ msgid "Functions" msgstr "Funktionen" #: ../../library/time.rst:127 -#, fuzzy msgid "" "Convert a tuple or :class:`struct_time` representing a time as returned " "by :func:`gmtime` or :func:`localtime` to a string of the following form: " @@ -257,13 +256,12 @@ msgstr "" "Leerzeichen aufgefüllt, zum Beispiel: ``'Wed Jun 9 04:26:40 1993'``." #: ../../library/time.rst:133 -#, fuzzy msgid "" "If *time_tuple* is not provided, the current time as returned " "by :func:`localtime` is used. Locale information is not used " "by :func:`asctime`." msgstr "" -"Ist *t* nicht angegeben, wird die aktuelle Zeit verwendet, " +"Ist *time_tuple* nicht angegeben, wird die aktuelle Zeit verwendet, " "wie :func:`localtime` sie zurückgibt. :func:`asctime` verwendet keine " "Angaben aus dem Gebietsschema." @@ -378,7 +376,6 @@ msgid "Similar to :func:`clock_settime` but set time with nanoseconds." msgstr "Wie :func:`clock_settime`, setzt die Zeit aber in Nanosekunden." #: ../../library/time.rst:220 -#, fuzzy msgid "" "Convert a time expressed in seconds since the epoch_ to a string of a form: " "``'Sun Jun 20 23:21:05 1993'`` representing local time. The day field is two " @@ -392,17 +389,16 @@ msgstr "" "1993'``." #: ../../library/time.rst:225 -#, fuzzy msgid "" "If *seconds* is not provided or :const:`None`, the current time as returned " "by :func:`.time` is used. ``ctime(seconds)`` is equivalent to " "``asctime(localtime(seconds))``. Locale information is not used " "by :func:`ctime`." msgstr "" -"Ist *secs* nicht angegeben oder :const:`None`, wird die aktuelle Zeit " -"verwendet, wie :func:`.time` sie zurückgibt. ``ctime(secs)`` entspricht " -"``asctime(localtime(secs))``. :func:`ctime` verwendet keine Angaben aus dem " -"Gebietsschema." +"Ist *seconds* nicht angegeben oder :const:`None`, wird die aktuelle Zeit " +"verwendet, wie :func:`.time` sie zurückgibt. ``ctime(seconds)`` entspricht " +"``asctime(localtime(seconds))``. :func:`ctime` verwendet keine Angaben aus " +"dem Gebietsschema." #: ../../library/time.rst:230 ../../library/time.rst:268 #: ../../library/time.rst:285 ../../library/time.rst:448 @@ -471,7 +467,6 @@ msgid "*resolution*: The resolution of the clock in seconds (:class:`float`)" msgstr "*resolution*: Die Auflösung der Uhr in Sekunden (:class:`float`)" #: ../../library/time.rst:261 -#, fuzzy msgid "" "Convert a time expressed in seconds since the epoch_ to " "a :class:`struct_time` in UTC in which the dst flag is always zero. If " @@ -482,19 +477,18 @@ msgid "" msgstr "" "Wandelt eine in Sekunden seit der Epoche (epoch_) angegebene Zeit in " "ein :class:`struct_time` in UTC um, bei dem das dst-Flag immer null ist. Ist " -"*secs* nicht angegeben oder :const:`None`, wird die aktuelle Zeit verwendet, " -"wie :func:`.time` sie zurückgibt. Bruchteile einer Sekunde werden nicht " -"beachtet. Eine Beschreibung des :class:`struct_time`-Objekts steht weiter " -"oben. Die Umkehrung dieser Funktion ist :func:`calendar.timegm`." +"*seconds* nicht angegeben oder :const:`None`, wird die aktuelle Zeit " +"verwendet, wie :func:`.time` sie zurückgibt. Bruchteile einer Sekunde werden " +"nicht beachtet. Eine Beschreibung des :class:`struct_time`-Objekts steht " +"weiter oben. Die Umkehrung dieser Funktion ist :func:`calendar.timegm`." #: ../../library/time.rst:274 -#, fuzzy msgid "" "Like :func:`gmtime` but converts to local time. If *seconds* is not provided " "or :const:`None`, the current time as returned by :func:`.time` is used. The " "dst flag is set to ``1`` when DST applies to the given time." msgstr "" -"Wie :func:`gmtime`, rechnet aber in die Ortszeit um. Ist *secs* nicht " +"Wie :func:`gmtime`, rechnet aber in die Ortszeit um. Ist *seconds* nicht " "angegeben oder :const:`None`, wird die aktuelle Zeit verwendet, " "wie :func:`.time` sie zurückgibt. Das dst-Flag wird auf ``1`` gesetzt, wenn " "für die angegebene Zeit die Sommerzeit gilt." @@ -702,7 +696,6 @@ msgid "Windows implementation" msgstr "Windows-Implementierung" #: ../../library/time.rst:409 -#, fuzzy msgid "" "On Windows, if *seconds* is zero, the thread relinquishes the remainder of " "its time slice to any other thread that is ready to run. If there are no " @@ -712,13 +705,13 @@ msgid "" "synchapi-createwaitabletimerexw>`_ which provides resolution of 100 " "nanoseconds. If *seconds* is zero, ``Sleep(0)`` is used." msgstr "" -"Ist *secs* unter Windows null, gibt der Thread den Rest seiner Zeitscheibe " -"an jeden anderen lauffähigen Thread ab. Gibt es keine anderen lauffähigen " -"Threads, kehrt die Funktion sofort zurück, und der Thread läuft weiter. " -"Unter Windows 10 und neuer verwendet die Implementierung einen " +"Ist *seconds* unter Windows null, gibt der Thread den Rest seiner " +"Zeitscheibe an jeden anderen lauffähigen Thread ab. Gibt es keine anderen " +"lauffähigen Threads, kehrt die Funktion sofort zurück, und der Thread läuft " +"weiter. Unter Windows 10 und neuer verwendet die Implementierung einen " "`hochauflösenden Zeitgeber `_, der eine Auflösung von 100 " -"Nanosekunden bietet. Ist *secs* null, wird ``Sleep(0)`` verwendet." +"Nanosekunden bietet. Ist *seconds* null, wird ``Sleep(0)`` verwendet." #: ../../library/time.rst:421 msgid "Unix implementation" @@ -755,22 +748,20 @@ msgstr "" "stattdessen :func:`os.sched_yield`." #: ../../library/time.rst:433 -#, fuzzy msgid "" "Raises an :ref:`auditing event ` ``time.sleep`` with argument " "``seconds``." msgstr "" "Löst ein :ref:`Auditing-Ereignis ` ``time.sleep`` mit dem Argument " -"``secs`` aus." +"``seconds`` aus." #: ../../library/time.rst:435 -#, fuzzy msgid "" "The function now sleeps at least *seconds* even if the sleep is interrupted " "by a signal, except if the signal handler raises an exception " "(see :pep:`475` for the rationale)." msgstr "" -"Die Funktion schläft jetzt mindestens *secs*, auch wenn das Schlafen von " +"Die Funktion schläft jetzt mindestens *seconds*, auch wenn das Schlafen von " "einem Signal unterbrochen wird, außer wenn der Signalhandler eine Ausnahme " "auslöst (die Begründung steht in :pep:`475`)." @@ -788,7 +779,6 @@ msgid "Raises an auditing event." msgstr "Löst ein Auditing-Ereignis aus." #: ../../library/time.rst:456 -#, fuzzy msgid "" "Convert a tuple or :class:`struct_time` representing a time as returned " "by :func:`gmtime` or :func:`localtime` to a string as specified by the " @@ -799,10 +789,11 @@ msgid "" msgstr "" "Wandelt ein Tupel oder ein :class:`struct_time`, das eine Zeit so darstellt, " "wie :func:`gmtime` oder :func:`localtime` sie zurückgeben, in eine " -"Zeichenkette um, wie das Argument *format* sie angibt. Ist *t* nicht " -"angegeben, wird die aktuelle Zeit verwendet, wie :func:`localtime` sie " -"zurückgibt. *format* muss eine Zeichenkette sein. Liegt ein Feld in *t* " -"außerhalb des zulässigen Bereichs, wird :exc:`ValueError` ausgelöst." +"Zeichenkette um, wie das Argument *format* sie angibt. Ist *time_tuple* " +"nicht angegeben, wird die aktuelle Zeit verwendet, wie :func:`localtime` sie " +"zurückgibt. *format* muss eine Zeichenkette sein. Liegt ein Feld in " +"*time_tuple* außerhalb des zulässigen Bereichs, wird :exc:`ValueError` " +"ausgelöst." #: ../../library/time.rst:462 msgid "" @@ -888,9 +879,8 @@ msgid "``%f``" msgstr "``%f``" #: ../../library/time.rst:488 -#, fuzzy msgid "Microseconds as a decimal number [000000,999999]." -msgstr "Mikrosekunden als Dezimalzahl" +msgstr "Mikrosekunden als Dezimalzahl [000000,999999]." #: ../../library/time.rst:488 msgid "\\(1)" diff --git a/library/tkinter.po b/library/tkinter.po index 70b792c7..1a09f495 100644 --- a/library/tkinter.po +++ b/library/tkinter.po @@ -1745,7 +1745,6 @@ msgid "bitmap" msgstr "bitmap" #: ../../library/tkinter.rst:783 -#, fuzzy msgid "" "There are ten built-in, named bitmaps: ``'error'``, ``'gray12'``, " "``'gray25'``, ``'gray50'``, ``'gray75'``, ``'hourglass'``, ``'info'``, " @@ -1758,9 +1757,12 @@ msgid "" msgstr "" "Es gibt zehn integrierte, benannte Bitmaps: ``'error'``, ``'gray12'``, " "``'gray25'``, ``'gray50'``, ``'gray75'``, ``'hourglass'``, ``'info'``, " -"``'questhead'``, ``'question'``, ``'warning'``. Um einen X-Bitmap-Dateinamen " -"anzugeben, nenne den vollständigen Pfad zur Datei mit vorangestelltem ``@``, " -"etwa ``\"@/usr/contrib/bitmap/gumby.bit\"``." +"``'questhead'``, ``'question'``, ``'warning'``. Unter macOS sind außerdem " +"diese Bitmaps verfügbar: ``'application'``, ``'accessory'``, ``'folder'``, " +"``'pfolder'``, ``'trash'``, ``'floppy'``, ``'ramdisk'``, ``'cdrom'``, " +"``'preferences'``, ``'querydoc'``, ``'stop'``, ``'note'`` und ``'caution'``. " +"Um einen X-Bitmap-Dateinamen anzugeben, nenne den vollständigen Pfad zur " +"Datei mit vorangestelltem ``@``, etwa ``\"@/usr/contrib/bitmap/gumby.bit\"``." #: ../../library/tkinter.rst:793 msgid "boolean" @@ -1889,7 +1891,6 @@ msgid "font" msgstr "font" #: ../../library/tkinter.rst:861 -#, fuzzy msgid "" "Tk uses a font description such as ``{courier 10 bold}``; in :mod:`!tkinter` " "this is most naturally passed as a tuple of ``(family, size, *styles)`` (or " @@ -1903,7 +1904,9 @@ msgstr "" "tkinter` übergibt man sie am natürlichsten als Tupel ``(family, size, " "*styles)`` (oder als die gleichwertige Zeichenkette ``\"Courier 10 " "bold\"``). Schriftgrößen mit positiven Zahlen werden in Punkt gemessen, " -"Größen mit negativen Zahlen in Pixeln." +"Größen mit negativen Zahlen in Pixeln. Auch der Name einer benannten Schrift " +"wie ``\"TkDefaultFont\"``, eine :class:`tkinter.font.Font`-Instanz oder, " +"unter X11, ein XLFD-Schriftname lässt sich verwenden." #: ../../library/tkinter.rst:870 msgid "justify" @@ -1922,11 +1925,8 @@ msgid "orient" msgstr "" #: ../../library/tkinter.rst:874 -#, fuzzy msgid "Legal values are ``\"horizontal\"`` and ``\"vertical\"``." -msgstr "" -"Zulässige Werte sind die Zeichenketten ``\"left\"``, ``\"center\"`` und " -"``\"right\"``." +msgstr "Zulässige Werte sind ``\"horizontal\"`` und ``\"vertical\"``." #: ../../library/tkinter.rst:876 msgid "padding" @@ -1946,7 +1946,6 @@ msgid "region" msgstr "region" #: ../../library/tkinter.rst:886 -#, fuzzy msgid "" "Used for the *scrollregion* option of :class:`Canvas`. This is a string with " "four space-delimited elements, each of which is a legal distance (see " @@ -1954,10 +1953,11 @@ msgid "" "``(2, 3, 4, 5)``, ``\"3i 2i 4.5i 2i\"`` and ``\"3c 2c 4c 10.43c\"`` are all " "legal regions." msgstr "" -"Das ist eine Zeichenkette mit vier durch Leerzeichen getrennten Elementen, " -"von denen jedes ein zulässiger Abstand ist (siehe oben). Zum Beispiel sind " -"``\"2 3 4 5\"``, ``\"3i 2i 4.5i 2i\"`` und ``\"3c 2c 4c 10.43c\"`` alles " -"zulässige Regionen." +"Wird für die Option *scrollregion* von :class:`Canvas` verwendet. Das ist " +"eine Zeichenkette mit vier durch Leerzeichen getrennten Elementen, von denen " +"jedes ein zulässiger Abstand ist (siehe oben), oder eine Sequenz aus vier " +"solchen Elementen. Zum Beispiel sind ``\"2 3 4 5\"``, ``(2, 3, 4, 5)``, " +"``\"3i 2i 4.5i 2i\"`` und ``\"3c 2c 4c 10.43c\"`` alles zulässige Regionen." #: ../../library/tkinter.rst:893 msgid "relief" @@ -2614,7 +2614,6 @@ msgstr "" "Gibt eine Liste der Namen aller Konfigurationsoptionen dieses Widgets zurück." #: ../../library/tkinter.rst:1161 -#, fuzzy msgid "" "Interpret the string *s* as a Tcl boolean and return the " "corresponding :class:`bool`. Tcl accepts values such as ``'1'``, ``'0'``, " @@ -2623,8 +2622,9 @@ msgid "" msgstr "" "Deutet die Zeichenkette *s* als Tcl-Wahrheitswert und gibt den " "entsprechenden :class:`bool` zurück. Tcl akzeptiert Werte wie ``'1'``, " -"``'0'``, ``'yes'``, ``'no'``, ``'true'`` und ``'false'``. " -"Löst :exc:`ValueError` aus, wenn *s* kein gültiger Wahrheitswert ist." +"``'0'``, ``'yes'``, ``'no'``, ``'true'``, ``'false'``, ``'on'`` und " +"``'off'``. Löst :exc:`ValueError` aus, wenn *s* kein gültiger Wahrheitswert " +"ist." #: ../../library/tkinter.rst:1169 msgid "" @@ -5823,7 +5823,6 @@ msgstr "" "und 1." #: ../../library/tkinter.rst:3327 -#, fuzzy msgid "" "Shift the view left or right by *number* units. *what* is either ``'units'`` " "or ``'pages'``; a negative *number* scrolls left and a positive one scrolls " @@ -5832,7 +5831,9 @@ msgid "" msgstr "" "Verschiebt den Ausschnitt um *number* Einheiten nach links oder rechts. " "*what* ist entweder ``'units'`` oder ``'pages'``. Ein negatives *number* " -"blättert nach links, ein positives nach rechts." +"blättert nach links, ein positives nach rechts. Das :class:`Text`-Widget " +"nimmt außerdem ``'pixels'`` an, dann darf *number* ein Bildschirmabstand wie " +"``'1i'`` sein." #: ../../library/tkinter.rst:3336 msgid "" @@ -5873,7 +5874,6 @@ msgstr "" "1." #: ../../library/tkinter.rst:3359 -#, fuzzy msgid "" "Shift the view up or down by *number* units. *what* is either ``'units'`` or " "``'pages'``; a negative *number* scrolls up and a positive one scrolls down. " @@ -5882,7 +5882,8 @@ msgid "" msgstr "" "Verschiebt den Ausschnitt um *number* Einheiten nach oben oder unten. *what* " "ist entweder ``'units'`` oder ``'pages'``. Ein negatives *number* blättert " -"nach oben, ein positives nach unten." +"nach oben, ein positives nach unten. Das :class:`Text`-Widget nimmt außerdem " +"``'pixels'`` an, dann darf *number* ein Bildschirmabstand wie ``'1i'`` sein." #: ../../library/tkinter.rst:3368 msgid "" diff --git a/library/turtle.po b/library/turtle.po index 64a0da62..bf5fe082 100644 --- a/library/turtle.po +++ b/library/turtle.po @@ -561,7 +561,6 @@ msgstr "" "sein (z. B. wie von :func:`pos` zurückgegeben)." #: ../../library/turtle.rst:336 -#, fuzzy msgid "" ">>> tp = turtle.pos()\n" ">>> tp\n" @@ -579,13 +578,13 @@ msgstr "" ">>> tp = turtle.pos()\n" ">>> tp\n" "(0.00,0.00)\n" -">>> turtle.setpos(60,30)\n" +">>> turtle.goto(60,30)\n" ">>> turtle.pos()\n" "(60.00,30.00)\n" -">>> turtle.setpos((20,80))\n" +">>> turtle.goto((20,80))\n" ">>> turtle.pos()\n" "(20.00,80.00)\n" -">>> turtle.setpos(tp)\n" +">>> turtle.goto(tp)\n" ">>> turtle.pos()\n" "(0.00,0.00)" @@ -849,15 +848,15 @@ msgid "a colorstring or a numeric color tuple" msgstr "ein Farbstring oder ein numerisches Farb-Tupel" #: ../../library/turtle.rst:536 -#, fuzzy msgid "" "Draw a circular dot with diameter *size*, using *color*. If *size* is not " "given, the larger of ``pensize + 4`` and ``2 * pensize`` is used. If *color* " "is not given, the current pencolor is used." msgstr "" "Zeichne einen kreisförmigen Punkt mit dem Durchmesser *size* in der Farbe " -"*color*. Wird *size* nicht angegeben, wird das Maximum aus ``pensize+4`` und " -"``2*pensize`` verwendet." +"*color*. Wird *size* nicht angegeben, wird das Maximum aus ``pensize + 4`` " +"und ``2 * pensize`` verwendet. Wird *color* nicht angegeben, wird die " +"aktuelle Stiftfarbe verwendet." #: ../../library/turtle.rst:540 msgid "" @@ -1083,7 +1082,6 @@ msgid "a number if *x* is a number, else ``None``" msgstr "eine Zahl, falls *x* eine Zahl ist, andernfalls ``None``" #: ../../library/turtle.rst:675 -#, fuzzy msgid "" "Return the angle of the line from the turtle's position to (x,y). If *y* is " "``None``, *x* must be a pair of coordinates, a :class:`Vec2D`, for example " @@ -1091,10 +1089,11 @@ msgid "" "the turtle's start orientation, which depends on the turtle mode, " "see :func:`mode`." msgstr "" -"Gib den Winkel zwischen der Linie von der Position der Turtle zu der durch " -"(x,y), den Vektor oder die andere Turtle angegebenen Position zurück. Dies " -"hängt von der Startausrichtung der Turtle ab, die wiederum vom Modus abhängt " -"– \"standard\"/\"world\" oder \"logo\"." +"Gib den Winkel der Linie von der Position der Turtle zu (x,y) zurück. Ist " +"*y* ``None``, muss *x* ein Koordinatenpaar sein, ein :class:`Vec2D` – zum " +"Beispiel wie von :func:`pos` zurückgegeben – oder eine andere Turtle. Der " +"Winkel wird von der Startausrichtung der Turtle aus gemessen, die vom Turtle-" +"Modus abhängt, siehe :func:`mode`." #: ../../library/turtle.rst:681 msgid "" @@ -1247,12 +1246,12 @@ msgstr "" "90.0" #: ../../library/turtle.rst:788 -#, fuzzy msgid "" "Set the angle measurement units to radians. Equivalent to ``degrees(2 * " "math.pi)``." msgstr "" -"Setze die Winkelmesseinheiten auf Radiant. Entspricht ``degrees(2*math.pi)``." +"Setze die Winkelmesseinheiten auf Radiant. Entspricht ``degrees(2 * " +"math.pi)``." #: ../../library/turtle.rst:791 msgid "" @@ -2453,13 +2452,12 @@ msgstr "" "und denselben Turtle-Eigenschaften zurück." #: ../../library/turtle.rst:1517 -#, fuzzy msgid "" ">>> leonel = Turtle()\n" ">>> marco = leonel.clone()" msgstr "" -">>> mick = Turtle()\n" -">>> joe = mick.clone()" +">>> leonel = Turtle()\n" +">>> marco = leonel.clone()" #: ../../library/turtle.rst:1527 #, fuzzy @@ -3575,14 +3573,13 @@ msgid "Example:" msgstr "Beispiel:" #: ../../library/turtle.rst:2248 -#, fuzzy msgid "" ">>> poly = ((0,0), (10,-5), (0,10), (-10,-5))\n" ">>> s = Shape(\"compound\")\n" ">>> s.addcomponent(poly, \"red\", \"blue\")\n" ">>> # ... add more components and then use register_shape()" msgstr "" -">>> poly = ((0,0),(10,-5),(0,10),(-10,-5))\n" +">>> poly = ((0,0), (10,-5), (0,10), (-10,-5))\n" ">>> s = Shape(\"compound\")\n" ">>> s.addcomponent(poly, \"red\", \"blue\")\n" ">>> # ... add more components and then use register_shape()" @@ -3754,7 +3751,6 @@ msgid "For example:" msgstr "Zum Beispiel:" #: ../../library/turtle.rst:2347 -#, fuzzy msgid "" ">>> s = Shape(\"compound\")\n" ">>> poly1 = ((0,0), (10,-5), (0,10), (-10,-5))\n" @@ -3763,9 +3759,9 @@ msgid "" ">>> s.addcomponent(poly2, \"blue\", \"red\")" msgstr "" ">>> s = Shape(\"compound\")\n" -">>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))\n" +">>> poly1 = ((0,0), (10,-5), (0,10), (-10,-5))\n" ">>> s.addcomponent(poly1, \"red\", \"blue\")\n" -">>> poly2 = ((0,0),(10,-5),(-10,-5))\n" +">>> poly2 = ((0,0), (10,-5), (-10,-5))\n" ">>> s.addcomponent(poly2, \"blue\", \"red\")" #: ../../library/turtle.rst:2356 diff --git a/reference/compound_stmts.po b/reference/compound_stmts.po index c32d9054..f7cdbc44 100644 --- a/reference/compound_stmts.po +++ b/reference/compound_stmts.po @@ -3416,7 +3416,6 @@ msgstr "" "Deklarationen::" #: ../../reference/compound_stmts.rst:1850 -#, fuzzy msgid "" "def overly_generic[\n" " SimpleTypeVar,\n" @@ -3435,9 +3434,9 @@ msgid "" msgstr "" "def overly_generic[\n" " SimpleTypeVar,\n" -" TypeVarWithDefault = int,\n" " TypeVarWithBound: int,\n" " TypeVarWithConstraints: (str, bytes),\n" +" TypeVarWithDefault = int,\n" " *SimpleTypeVarTuple = (int, float),\n" " **SimpleParamSpec = (str, bytearray),\n" "](\n" diff --git a/reference/datamodel.po b/reference/datamodel.po index ca9e5613..17216784 100644 --- a/reference/datamodel.po +++ b/reference/datamodel.po @@ -1402,13 +1402,12 @@ msgstr "" ":attr:`!__name__` ist der Name der Funktion. Siehe :attr:`function.__name__`." #: ../../reference/datamodel.rst:866 -#, fuzzy msgid "" ":attr:`!__self__` is the module object the function was defined in or " "``None`` if unavailable." msgstr "" -"Der Name des Moduls, in dem die Funktion definiert wurde, oder „ ``None`` “, " -"falls dieser nicht verfügbar ist." +":attr:`!__self__` ist das Modulobjekt, in dem die Funktion definiert wurde, " +"oder ``None``, wenn es nicht verfügbar ist." #: ../../reference/datamodel.rst:868 msgid "" @@ -2487,6 +2486,12 @@ msgid "" "position information. To create a modified copy of a code object, " "use :meth:`~codeobject.replace`." msgstr "" +"Ein :class:`bytes`-Objekt mit kodierten Angaben zur Position im Quelltext. " +"Das genaue Format ist ein Implementierungsdetail und kann sich zwischen " +"Python-Versionen ändern. Für den unterstützten Zugriff auf Zeilen- und " +"Positionsangaben verwende :meth:`~codeobject.co_lines` " +"und :meth:`~codeobject.co_positions`. Um eine veränderte Kopie eines Code-" +"Objekts zu erzeugen, verwende :meth:`~codeobject.replace`." #: ../../reference/datamodel.rst:1572 msgid "The required stack size of the code object" diff --git a/reference/expressions.po b/reference/expressions.po index ca78443b..2cc7598e 100644 --- a/reference/expressions.po +++ b/reference/expressions.po @@ -1158,7 +1158,6 @@ msgid "At run time, this corresponds roughly to calling this function::" msgstr "Zur Laufzeit entspricht das ungefähr dem Aufruf dieser Funktion::" #: ../../reference/expressions.rst:705 -#, fuzzy msgid "" "def make_lowercase_set(iterable):\n" " result = set()\n" @@ -1169,9 +1168,9 @@ msgid "" "make_lowercase_set(['a', 'A', 'b', 'C'])" msgstr "" "def make_lowercase_set(iterable):\n" -" result = set(iterable)\n" +" result = set()\n" " for x in iterable:\n" -" result.append(x.lower())\n" +" result.add(x.lower())\n" " return result\n" "\n" "make_lowercase_set(['a', 'A', 'b', 'C'])" @@ -1201,7 +1200,6 @@ msgid "At run time, this corresponds roughly to::" msgstr "Zur Laufzeit entspricht das ungefähr Folgendem::" #: ../../reference/expressions.rst:723 -#, fuzzy msgid "" "def make_dict_mapping_names_to_functions(iterable):\n" " result = {}\n" @@ -1217,7 +1215,7 @@ msgstr "" " result[func.__name__] = func\n" " return result\n" "\n" -"iterable([print, hex, any])" +"make_dict_mapping_names_to_functions([print, hex, any])" #: ../../reference/expressions.rst:731 msgid "" diff --git a/tutorial/errors.po b/tutorial/errors.po index 70341a2e..be43127a 100644 --- a/tutorial/errors.po +++ b/tutorial/errors.po @@ -1350,7 +1350,6 @@ msgstr "" "ausgelöst und abgefangen wurden, und zwar nach dem folgenden Muster:" #: ../../tutorial/errors.rst:610 -#, fuzzy msgid "" ">>> excs = []\n" ">>> for test in tests:\n" @@ -1364,7 +1363,7 @@ msgid "" "..." msgstr "" ">>> excs = []\n" -"... for test in tests:\n" +">>> for test in tests:\n" "... try:\n" "... test.run()\n" "... except Exception as e:\n" diff --git a/using/cmdline.po b/using/cmdline.po index 86f5f34d..06d9546b 100644 --- a/using/cmdline.po +++ b/using/cmdline.po @@ -1210,14 +1210,13 @@ msgstr "" "auch :envvar:`PYTHON_PERF_JIT_SUPPORT` und :ref:`perf_profiling`." #: ../../using/cmdline.rst:655 -#, fuzzy msgid "" "``-X disable-remote-debug`` disables the remote debugging support as " "described in :pep:`768`. This includes both the functionality to schedule " "code for execution in another process and the functionality to receive code " "for execution in the current process." msgstr "" -"``-X disable_remote_debug`` schaltet die Unterstützung für das Fern-" +"``-X disable-remote-debug`` schaltet die Unterstützung für das Fern-" "Debugging ab, wie sie in :pep:`768` beschrieben ist. Das betrifft sowohl die " "Möglichkeit, Code zur Ausführung in einem anderen Prozess einzuplanen, als " "auch die Möglichkeit, Code zur Ausführung im aktuellen Prozess zu empfangen." diff --git a/using/ios.po b/using/ios.po index a2b62b72..95953357 100644 --- a/using/ios.po +++ b/using/ios.po @@ -75,7 +75,6 @@ msgstr "" "über den iOS App Store vertrieben werden kann." #: ../../using/ios.rst:27 -#, fuzzy msgid "" "If you're looking to experiment for the first time with writing an iOS app " "in Python, projects such as `BeeWare `__, `Kivy " @@ -86,10 +85,10 @@ msgid "" msgstr "" "Wenn du zum ersten Mal damit experimentieren möchtest, eine iOS-App in " "Python zu schreiben, bieten dir Projekte wie `BeeWare `__ und `Kivy `__ eine deutlich zugänglichere " -"Nutzererfahrung. Diese Projekte übernehmen die Komplexität, die mit dem Zum-" -"Laufen-Bringen eines iOS-Projekts verbunden ist, sodass du dich nur um den " -"eigentlichen Python-Code kümmern musst." +"beeware.org>`__, `Kivy `__ und `Flet `__ eine deutlich zugänglichere Nutzererfahrung. Diese Projekte übernehmen " +"die Komplexität, die mit dem Zum-Laufen-Bringen eines iOS-Projekts verbunden " +"ist, sodass du dich nur um den eigentlichen Python-Code kümmern musst." #: ../../using/ios.rst:35 msgid "Python at runtime on iOS" diff --git a/using/windows.po b/using/windows.po index b7f4979d..ccc6fc4b 100644 --- a/using/windows.po +++ b/using/windows.po @@ -667,7 +667,6 @@ msgstr "" "vorhandene Installation entfernt, um sie durch die angegebene zu ersetzen." #: ../../using/windows.rst:303 -#, fuzzy msgid "" "Passing ``--update`` will replace existing installs if the new version is " "newer. Otherwise, they will be left. If no tags are provided with ``--" @@ -682,7 +681,8 @@ msgstr "" "update`` keine Tags angegeben, werden alle vom Python Install Manager " "verwalteten Installationen aktualisiert, für die neuere Versionen vorliegen. " "Aktualisierungen entfernen alle Änderungen an der Installation, auch global " -"installierte Pakete. Virtuelle Umgebungen funktionieren jedoch weiter." +"installierte Pakete, lassen aber die Verzeichnisse ``site-packages`` und " +"``Scripts`` unverändert. Virtuelle Umgebungen sind ebenfalls nicht betroffen." #: ../../using/windows.rst:310 msgid "" diff --git a/whatsnew/3.10.po b/whatsnew/3.10.po index abdcf316..4f204f8d 100644 --- a/whatsnew/3.10.po +++ b/whatsnew/3.10.po @@ -3702,9 +3702,8 @@ msgid "``threading.Thread.setName`` => :attr:`threading.Thread.name`" msgstr "``threading.Thread.setName`` => :attr:`threading.Thread.name`" #: ../../whatsnew/3.10.rst:1745 -#, fuzzy msgid "``threading.Thread.getName`` => :attr:`threading.Thread.name`" -msgstr "``threading.thread.getName`` => :attr:`threading.Thread.name`" +msgstr "``threading.Thread.getName`` => :attr:`threading.Thread.name`" #: ../../whatsnew/3.10.rst:1747 msgid "``threading.Thread.isDaemon`` => :attr:`threading.Thread.daemon`" diff --git a/whatsnew/3.12.po b/whatsnew/3.12.po index b14852cc..43eee1cb 100644 --- a/whatsnew/3.12.po +++ b/whatsnew/3.12.po @@ -6014,11 +6014,12 @@ msgstr "" "Unsterblichkeit hat." #: ../../whatsnew/3.12.rst:1998 -#, fuzzy msgid "" "``PyObject_HEAD_INIT`` This will now initialize reference count to " "``_Py_IMMORTAL_REFCNT`` when used with ``Py_BUILD_CORE``." -msgstr "``PyObject_HEAD_INIT`` setzt den Referenzzähler jetzt auf" +msgstr "" +"``PyObject_HEAD_INIT`` setzt den Referenzzähler jetzt auf " +"``_Py_IMMORTAL_REFCNT``, wenn es mit ``Py_BUILD_CORE`` verwendet wird." #: ../../whatsnew/3.12.rst:2000 #, fuzzy @@ -6030,21 +6031,20 @@ msgstr "" "Objekte," #: ../../whatsnew/3.12.rst:2002 -#, fuzzy msgid "" "``SSTATE_INTERNED_IMMORTAL_STATIC`` An identifier for interned unicode " "objects that are immortal and static" msgstr "" -"``SSTATE_INTERNED_IMMORTAL`` eine Kennzeichnung für internierte Unicode-" -"Objekte," +"``SSTATE_INTERNED_IMMORTAL_STATIC`` eine Kennzeichnung für internierte " +"Unicode-Objekte, die unsterblich und statisch sind" #: ../../whatsnew/3.12.rst:2004 -#, fuzzy msgid "" "``sys.getunicodeinternedsize`` This returns the total number of unicode " "objects that have been interned. This is now needed for :file:`refleak.py` " "to correctly track reference counts and allocated blocks" msgstr "" +"``sys.getunicodeinternedsize`` gibt die Gesamtzahl der Unicode-Objekte " "zurück, die interniert wurden. Das wird jetzt gebraucht, " "damit :file:`refleak.py` Referenzzähler und angeforderte Speicherblöcke " "richtig verfolgen kann" diff --git a/whatsnew/3.13.po b/whatsnew/3.13.po index 6c9287ba..649a039e 100644 --- a/whatsnew/3.13.po +++ b/whatsnew/3.13.po @@ -7439,7 +7439,6 @@ msgstr "" "`." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:33 -#, fuzzy msgid "" ":c:func:`!_PyUnicodeWriter_WriteASCIIString`: replace " "``_PyUnicodeWriter_WriteASCIIString(&writer, str, size)`` " @@ -7447,12 +7446,11 @@ msgid "" "`." msgstr "" ":c:func:`!_PyUnicodeWriter_WriteASCIIString`: ersetze " -"``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` " -"durch :c:func:`PyUnicodeWriter_WriteASCII(writer, str) " +"``_PyUnicodeWriter_WriteASCIIString(&writer, str, size)`` " +"durch :c:func:`PyUnicodeWriter_WriteASCII(writer, str, size) " "`." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:36 -#, fuzzy msgid "" ":c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace " "``_PyUnicodeWriter_WriteLatin1String(&writer, str, size)`` by decoding the " @@ -7461,9 +7459,10 @@ msgid "" "with :c:func:`Py_DECREF`." msgstr "" ":c:func:`!_PyUnicodeWriter_WriteLatin1String`: ersetze " -"``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` " -"durch :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) " -"`." +"``_PyUnicodeWriter_WriteLatin1String(&writer, str, size)``, indem du die " +"Zeichenkette mit :c:func:`PyUnicode_DecodeLatin1` dekodierst, das Ergebnis " +"mit :c:func:`PyUnicodeWriter_WriteStr` schreibst und es " +"mit :c:func:`Py_DECREF` freigibst." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:41 msgid ":c:func:`!_PyUnicodeWriter_Prepare`: (no replacement)." diff --git a/whatsnew/3.14.po b/whatsnew/3.14.po index 02a077ca..2684428c 100644 --- a/whatsnew/3.14.po +++ b/whatsnew/3.14.po @@ -813,7 +813,6 @@ msgstr "" "Funktion :func:`sys.remote_exec` umgesetzt. Zum Beispiel:" #: ../../whatsnew/3.14.rst:404 -#, fuzzy msgid "" "import os, sys\n" "from tempfile import NamedTemporaryFile\n" @@ -826,7 +825,7 @@ msgid "" "print('Behold! An offering:')\n" "sys.remote_exec(1234, script_path)" msgstr "" -"import sys\n" +"import os, sys\n" "from tempfile import NamedTemporaryFile\n" "\n" "with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:\n" @@ -8303,7 +8302,6 @@ msgstr "" "`." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:33 -#, fuzzy msgid "" ":c:func:`!_PyUnicodeWriter_WriteASCIIString`: replace " "``_PyUnicodeWriter_WriteASCIIString(&writer, str, size)`` " @@ -8311,12 +8309,11 @@ msgid "" "`." msgstr "" ":c:func:`!_PyUnicodeWriter_WriteASCIIString`: ersetze " -"``_PyUnicodeWriter_WriteASCIIString(&writer, str)`` " -"durch :c:func:`PyUnicodeWriter_WriteASCII(writer, str) " +"``_PyUnicodeWriter_WriteASCIIString(&writer, str, size)`` " +"durch :c:func:`PyUnicodeWriter_WriteASCII(writer, str, size) " "`." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:36 -#, fuzzy msgid "" ":c:func:`!_PyUnicodeWriter_WriteLatin1String`: replace " "``_PyUnicodeWriter_WriteLatin1String(&writer, str, size)`` by decoding the " @@ -8325,9 +8322,10 @@ msgid "" "with :c:func:`Py_DECREF`." msgstr "" ":c:func:`!_PyUnicodeWriter_WriteLatin1String`: ersetze " -"``_PyUnicodeWriter_WriteLatin1String(&writer, str)`` " -"durch :c:func:`PyUnicodeWriter_WriteUTF8(writer, str) " -"`." +"``_PyUnicodeWriter_WriteLatin1String(&writer, str, size)``, indem du die " +"Zeichenkette mit :c:func:`PyUnicode_DecodeLatin1` dekodierst, das Ergebnis " +"mit :c:func:`PyUnicodeWriter_WriteStr` schreibst und es " +"mit :c:func:`Py_DECREF` freigibst." #: ../../deprecations/c-api-pending-removal-in-3.18.rst:41 msgid ":c:func:`!_PyUnicodeWriter_Prepare`: (no replacement)."