OO in Python: Initialisierung, Module

13/05/2009 - 14:21 von Ole Streicher | Report spam
Hallo Gruppe,

als Lernender habe ich zwei Fragen zur Korrektheit bzw. dem "richtigen
Stil" in Python: Soweit ich verstanden habe, kann ich Attribute an eine
Klasse einfach durch eine Zuweisung binden, d.h.

class C1(object):
x = 1

Andererseits gibt es aber auch die __init__-Funktion:

class C2(object):
def __init__():
x = 1

Und man könnte x auch noch in der __new__-Funktion binden.
Welche Variante ist normalerweise vorzuziehen?

Falls die erste: gibt es (analog zu Java) eine allgemeine Praxis, die
Attribute an den Anfang zu setzen? Und eine Möglichkeit, ihnen einen
Docstring zu verpassen?

Die zweite Frage betrifft den Umgang mit Modulen. Von Java ist mir die
Methode "Eine Datei, eine Klasse" gelàufig. Ist das auch unter Python
üblich? Wenn ja, wie wàhlt man zweckmàßigerweise die Bezeichnungen?
So?

Modul myclass.py
class MyClass(object):
...

Modul mypackage.py
from myclass import *
...

um es so zu verwenden:

import mypackage
mc = mypackage.MyClass()

Falls nein: wie strukturiert man sinnvollerweise in Projekt? Man wird ja
nicht alle Klassen eines Pakets in einer einzigen Datei verwalten wollen.

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Ole Streicher
13/05/2009 - 14:34 | Warnen spam
Ole "Ingrid" Streicher writes:
class C1(object):
x = 1
class C2(object):
def __init__():
x = 1



Lesen bildet :-) (zumindest ein wenig)

Soweit ich verstanden habe, ist "x" in der Klasse C1 eine Art statischer
Variable (d.h. es gibt sie einmal pro Klasse und wird mit C1.x
abgefragt), wàhrend die zweite Definition falsch ist (es müsste
"self.x = 1" heißen).

Den ersten Fall verstehe ich trotzdem nicht: Ausprobieren zeigt nàmlich,

a = C1()
b = C1()
print (C1.x, a.x, b.x) > (1, 1, 1)
b.x = 2
print (C1.x, a.x, b.x) > (1, 1, 2)

zeigt, dass a.x, b.x und C1.x doch unterschiedlich sind?

C1.x = 3
print (C1.x, a.x, b.x) > (3, 3, 2)

Aber wieso ist jetzt a.x auch 3, aber nicht b.x???

Viele Grüße

Ole

Ähnliche fragen