Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5003

Re: [Python-de] __init__ ?

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Stefan Behnel <python-de@behnel.de>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] __init__ ?
Date Sat, 4 Nov 2017 07:43:32 +0100
Lines 73
Message-ID <mailman.224.1509779273.1490.python-de@python.org> (permalink)
References <f60n90F4clsU1@mid.individual.net> <1a70d170-695d-4592-08b3-77cda4bd5e66@behnel.de>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de R11OVAyeFChcrzvcKVuCfgFTaqYLm/N3/u4vzBoP5RyQ==
Return-Path <python-de@behnel.de>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; t=1509779271; s=domk; d=behnel.de; h=Content-Transfer-Encoding:Content-Language:Content-Type:In-Reply-To: MIME-Version:Date:From:References:To:Subject; bh=SGV4SdZFQgsmFOgPJcgaQNXFFzG9Y7KOGDLr8o5fVlA=; b=MlU/luaMoRcl7Q/PjoPwGpCTAkVsXc6MwfcllRuVzzLdlLwHowGNoraK/Mtxfap8Lu i8cJVZeNtnXJ7/ska3mmEssQELRfh85VYUG3jQ+gZW9gA03EulReYD85xMpusmwRV/FD 3w1y90hJ/3Tql8f3+aQxz9uePF5BvNXGMXemU=
X-RZG-AUTH :E1MMdFW4b++AXZOTwA41DOYM0Dv9LNWvavC/fJZ6Wfgmp/Lh1ANWCRaaq2R1hCooD/t2Vl9QPFHZv/gGfhMyKTzCI7K4Y+eL9qBSOkaDEqM8M18=
X-RZG-CLASS-ID mo00
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0
In-Reply-To <f60n90F4clsU1@mid.individual.net>
Content-Language de-DE
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.25
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-de/>
List-Post <mailto:python-de@python.org>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <1a70d170-695d-4592-08b3-77cda4bd5e66@behnel.de>
X-Mailman-Original-References <f60n90F4clsU1@mid.individual.net>
Xref csiph.com de.comp.lang.python:5003

Show key headers only | View raw


Hermann Riemann schrieb am 02.11.2017 um 15:09:
> Bisher habe ich etwas wie
> 
> class Cl():
>    def __init__(self):
>       self.x=1
> 
> gemacht.
> So wie das in Bücher üblich ist.
> 
> In einer raspberry pi Zeitschrift habe ich gesehen
> dann man stattdessen auch
> 
> class Cl():
>    x=1
> 
> schreiben kann.

Nein, das ist nicht dasselbe. Im ersten Fall setzt du ein Attribut auf der
Objekt-Instanz, also auf einer einzigen, konkreten Instanz einer Klasse. Im
zweiten Fall setzt du ein Attribut auf der Klasse, das damit auf allen
Instanzen dieser Klasse sichtbar wird. Wohlgemerkt, das *selbe* Attribut
mit dem *selben* Wert. Es gibt diesen Wert also nur genau einmal.

Den Unterschied kannst du hier sehen:

In [1]: class C: x = 1

In [2]: C().x
Out[2]: 1

In [3]: C.x = 2

In [4]: c = C()

In [5]: c.x
Out[5]: 2

In [6]: C.x = 3

In [7]: c.x
Out[7]: 3

In [8]: c.x = 4

In [9]: c.x
Out[9]: 4

In [10]: C.x = 5

In [11]: c.x
Out[11]: 4


Erst in [8] setze ich ein Attribut auf der Instanz. Ab da sind Änderungen
am Klassenattribut nicht mehr (direkt) an "c" sichtbar, weil "c.x" nun das
Instanzattribut verwendet und nicht mehr das (dahinter liegende)
Klassenattribut.

Den Hinweis, dass das vor Allem Auswirkungen bei veränderbaren
Datenstrukturen wie Listen hat, haben andere ja bereits geliefert. Es ist
ein großer Unterschied, ob eine Liste für alle Instanzen dieselbe ist, oder
ob jede Instanz eine eigene, separate Liste verwendet.

Das bedeutet übrigens nicht, dass mensch sowas nicht machen sollte. Ich
sehe es als völlig legitime Art, z.B. einen Standardwert für ein Attribut
zu definieren. Aber es hilft wie immer, die Entscheidung bewusst und
fundiert zu treffen, weil mensch sonst Gefahr läuft, Code blind zu
kopieren. Siehe z.B.

https://www.aisec.fraunhofer.de/en/stackoverflow.html

Stefan

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

__init__ ? Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-11-02 15:09 +0100
  Re: [Python-de] __init__ ? Thomas Güttler <guettliml@thomas-guettler.de> - 2017-11-02 15:22 +0100
    Re: [Python-de] __init__ ? Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-11-02 15:51 +0100
  Re: [Python-de] __init__ ? "Diez B. Roggisch" <deets@web.de> - 2017-11-02 15:33 +0100
    Re: Python Beispiele SDL2? (was: __init__ ?) Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-11-02 17:28 +0100
      Re: [Python-de] Python Beispiele SDL2? (was: __init__ ?) "Diez B. Roggisch" <deets@web.de> - 2017-11-02 18:10 +0100
  Re: [Python-de] __init__ ? Stefan Behnel <python-de@behnel.de> - 2017-11-04 07:43 +0100
  Re: [Python-de] __init__ ? Dinu Gherman <gherman@darwin.in-berlin.de> - 2017-11-05 18:15 +0100
  Re: [Python-de] __init__ ? "Diez B. Roggisch" <deets@web.de> - 2017-11-05 22:09 +0100
  Re: [Python-de] __init__ ? Stefan Behnel <python-de@behnel.de> - 2017-11-06 20:57 +0100
    Re: [Python-de] __init__ ? Stefan Behnel <python-de@behnel.de> - 2017-11-06 21:28 +0100
      Re: [Python-de] __init__ ? "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2017-11-06 22:29 +0100
        Re: [Python-de] __init__ ? "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2017-11-07 11:11 +0000
        Re: [Python-de] __init__ ? Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-11-12 18:37 +0100
    Re: [Python-de] __init__ ? Hermann Riemann <nospam.ng@hermann-riemann.de> - 2017-11-12 19:22 +0100

csiph-web