Moin und willkommen im Forum
Ich versuche mal, deine Fragen der Reihe nach durchzugehen.
Kefflin hat geschrieben:1. Kann es sein, dass es keine geschützten Attribute in Klassen gibt (Private, Protected)?
2. Irgendwo im Internet habe ich gelesen, dass dies mit Unterstrichen gemacht wird. Kann es sein das dies nur ein Styleguide ist?
Exakt. In Python gibt es sowas wie private nicht, man vertraut darauf, dass der Programmierer weiss, was er tut. Die Konvention ist, wie du schon richtig gelesen hast, Sachen, die man in anderen Sprachen als "private" deklarieren wuerde, mit einem Unterstrich am Anfang zu benennen, z.B. _methode. Das hindert zwar niemandem am Zugriff darauf, aber die Leute wissen, dass sie es besser nicht anfassen.
3. In Pythoncode, den ich studiere, sehe ich öfters solche Konstrukte:
Code: Alles auswählen
class Foo:
def __init__(self, name):
self.name = name
def info(self):
print "Ich bin: " + self.name
Warum wird das nicht so gemacht, dass name im Kopf der Klasse steht.
Code: Alles auswählen
class Foo:
name = ""
def __init__(self, name):
self.name = name
def info(self):
print "Ich bin: " + self.name
Das hat eine etwas andere semantische Bedeutung. Variablen initialisiert man fuer gewoehnlich halt im Konstruktor (wodurch man das z.B. auch dynamisch machen kann). Dadurch, dass es keine Deklarationen gibt, entfaellt eine Uebersicht aller Instanzvariablen, wie du sie aus Java gewohnt bist (was du vermutlich versuchst, damit zu erreichen, die variablen in den Kopf zu schreiben). Meistens stehen die aber alle im Konstruktor drin.
4. Wenn ich eine Klasse Foo habe, die ich in einem anderen Script verwenden will, mache ich das so:
Das ist aber unschön, geht das anders?
Ja, du kannst auch
machen. In Python ist es allerdings nicht so wie in Java, dass man eine Datei fuer eine Klasse hat, die dazu noch den gleichen Namen wie die Klasse hat. Stell dir ein Modul mehr wie ein Java-Package vor, das eine ganze Sammlung von Klassen enthaelt.
Eine wichtige Erkenntnis ist, dass sie die Objektmodelle von Python und Java stark unterscheiden, Python ist da (wir eigentlich ueberall) deutlich dynamischer.
Ich hoffe, ich konnte helfen.