Funktionen in Python nur am Anfang

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

SchneiderWeisse hat geschrieben:@cofi: was soll dein Beispiel da jetzt bewirken - so wird das bestimmt nicht funktionieren?
Erm ja ... danke. Ich bin noch vor dem ersten Kaffee.

Code: Alles auswählen

class foo(object):
    def __init__(ValidatorKlasse1, ValidatorKlasse2, ValidatorKlasse3):
        value1 = ValidatorKlasse1()
        value2 = ValidatorKlasse2()
        value3 = ValidatorKlasse3()
@J.D.: Kanns sein, dass ``validator`` eine Funktion sein soll?
J.D.
User
Beiträge: 3
Registriert: Dienstag 1. September 2009, 08:40

Das mit den Validatoren war nur beispielhaft (weil mein Code zur Validierung von Objekten dienen soll) und verwirrt hier vielleicht mehr, als dass es hilft. Zudem habe ich mich offenbar schon wieder vertippt (Schande über mich): Der Punkt bei validators ist natürlich Unsinn.

Ich möchte nicht ausschließen, dass sich der Code noch stark optimieren lässt, da ich selbst blutiger Anfänger in Python bin (komme aus der Java-Ecke).

In Java wäre mein Beispiel kein Problem, da Klassen zumeist in eigenen Dateien zu finden sind und nicht in Modulen zusammengefasst werden, in denen dann die Reihenfolge offenbar schon eine Rolle spielt (zumindest wenn man mit Vererbung arbeitet.

Das Problem an meinem Beispiel ist einfach: Klasse B muss Klasse A kennen (da B Kind von A ist), aber Klasse A muss auch B kennen (da B in A verwendet wird). Meiner Meinung nach geht das nicht, falls nicht eine der beiden Klassen explizit der anderen übergeben wird (was in meinem Beispiel nicht der Fall ist).

Das mit den Validatoren ist eher nebensächlich, sorry dafür. Aber ja: validators() ist eine Funktion, der ich eine Klasse übergebe.
BlackJack

@J.D.: Kannst Du das eventuell mit Sinn füllen? Warum willst Du so eine komische Beziehung haben? Ich fände das auch unter Java eigenartig. Kannst Du keine Gemeinsamkeiten in eine dritte Klasse auslagern?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Code: Alles auswählen

>>> class A(object):
...   def __init__(self):
...     self.b = B()
... 
>>> class B(A):
...   def __init__(self):
...     pass
... 
>>> a = A()
>>> b = B()
>>> a
<__main__.A object at 0xb7e5b84c>
>>> a.b
<__main__.B object at 0xb7e5b62c>
B erbt von A und A verwendet B. Und wo ist jetzt das Problem?
Bottle: Micro Web Framework + Development Blog
BlackJack

@Defnull: Zumindest den Beispielen nach soll `B` anscheinend bei `A` schon bei der Klassendefinition von `A` als bzw. für ein Klassenattribut verwendet werden.
lunar

Als Klassenattribut (aka statische Variable) kann das doch auch in Java nicht funktionieren. Wie sollte das den ausgewertet werden?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Nope, dies hier funktioniert:

Code: Alles auswählen

public class Foo {
	static Bar bar = Bar.baz;
}

public  class Bar extends Foo {
  static Bar baz = new Bar();
  static {
    System.out.println(Foo.bar);
  }
}
Ruft man `new Foo().bar` auf, erhält man ein `Bar`-Exemplar, allerdings zeigt das `println`, dass wenn die Klasse `Bar` initialisiert wird, offensichtlich `Foo` noch nicht initialisiert wurde. In Java ist es nicht notwendig, dass der class initializer der Oberklasse vor dem der Unterklasse ausgeführt wird.

Stefan
lunar

Aha, danke für die Erklärung :)
Antworten