Sichtbarkeiten von Variablen

Code-Stücke können hier veröffentlicht werden.
Antworten
alfware17
User
Beiträge: 51
Registriert: Montag 9. September 2024, 17:53

Angeregt durch die Beschäftigung mit Variablen in meinem pycopy-Programm habe ich mal chatGPT nach dem Stand der Technik befragt :-)
Folgende Beispiele wurden generiert

Code: Alles auswählen

# Globale Variable
shared_variable = 0  # Diese Variable kann von mehreren Funktionen gelesen und geändert werden

# Funktion außerhalb von main()
def external_function():
    """Diese Funktion nutzt und ändert die globale Variable."""
    global shared_variable
    shared_variable += 10
    print(f"External Function: shared_variable = {shared_variable}")

def main():
    """Hauptprogramm mit einer verschachtelten Funktion."""
    # Lokale Variable in main(), die innerhalb von main() genutzt wird
    local_variable = 5

    def inner_function():
        """Verschachtelte Funktion, die eine lokale Variable ändert."""
        nonlocal local_variable
        global shared_variable

        local_variable += 2  # Ändert die lokale Variable von main()
        shared_variable += 20  # Ändert die globale Variable
        
        print(f"Inner Function: local_variable = {local_variable}")
        print(f"Inner Function: shared_variable = {shared_variable}")

    print("Before inner_function:")
    print(f"Main: local_variable = {local_variable}")
    print(f"Main: shared_variable = {shared_variable}")

    inner_function()  # Ruft die verschachtelte Funktion auf

    print("After inner_function:")
    print(f"Main: local_variable = {local_variable}")
    print(f"Main: shared_variable = {shared_variable}")

    # Ruft die externe Funktion auf
    external_function()

# Sicherstellen, dass das Programm nur ausgeführt wird, wenn es direkt gestartet wird
if __name__ == "__main__":
    main()
und noch etwas moderner mit Klassen:

Code: Alles auswählen

class Car:
    # Klassenvariable
    total_cars = 0

    def __init__(self, make, model, year):
        # Instanzvariablen
        self.make = make
        self.model = model
        self.year = year

        # Erhöht die Klassenvariable für jedes neue Auto
        Car.total_cars += 1

    def display_info(self):
        """Instanzmethode zur Anzeige der Auto-Informationen."""
        print(f"Car: {self.year} {self.make} {self.model}")
    
    @classmethod
    def total_cars_created(cls):
        """Klassenmethode zum Anzeigen der Gesamtzahl der erstellten Autos."""
        print(f"Total cars created: {cls.total_cars}")
    
    def update_model(self, new_model):
        """Instanzmethode zum Ändern des Modells des Autos."""
        self.model = new_model


def change_car_make(car, new_make):
    """Diese Funktion ändert die Marke eines übergebenen Autos."""
    car.make = new_make


def main():
    """Hauptprogramm, das die Klassen und ihre Funktionen verwendet."""
    # Erstellen von zwei Instanzen der Klasse Car
    car1 = Car("Toyota", "Camry", 2020)
    car2 = Car("Honda", "Civic", 2021)
    
    # Anzeigen der Informationen für jedes Auto
    print("Vor den Änderungen:")
    car1.display_info()  # Car: 2020 Toyota Camry
    car2.display_info()  # Car: 2021 Honda Civic

    # Ändern der Instanzvariablen von car1 (Modell und Marke)
    car1.update_model("Corolla")  # Ändern des Modells über eine Instanzmethode
    change_car_make(car1, "Ford")  # Ändern der Marke über eine externe Methode

    # Ändern der Klassenvariable
    Car.total_cars += 1  # Füge ein weiteres Auto zur Gesamtzahl hinzu
    
    # Anzeigen der neuen Informationen nach Änderungen
    print("\nNach den Änderungen:")
    car1.display_info()  # Car: 2020 Ford Corolla
    car2.display_info()  # Car: 2021 Honda Civic
    
    # Anzeigen der Gesamtzahl der Autos
    Car.total_cars_created()  # Output: Total cars created: 3 (wurde manuell erhöht)


# Das Programm nur ausführen, wenn es direkt gestartet wird
if __name__ == "__main__":
    main()
Okay so habe ich mir das vorgestellt. Dann kann ich das mal umschreiben. Ich nehme mal an das Klassenkonzept verstehen alle Python-Versionen?
Benutzeravatar
Dennis89
User
Beiträge: 1516
Registriert: Freitag 11. Dezember 2020, 15:13

Ach dann hätte ich gar nichts erklären müssen, so geht‘s ja einfacher.

Btw. das erste Beispiel ist Mist.

Klasse kannst du schreiben, wenn du dir einen Zustand über den Aufruf hinweg merken musst. Das ist kein Konzept um an deiner Struktur festzuhalten. Wollte ich nur mal erwähnt haben, da ich mir vorstellen kann, wie dein nächster Code aussieht.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten