Category: anfanger
Python hosting: Host, run, and code Python in the cloud!
Klassen
Technologie evaluierst immer.
1. Statements
das meist einfache Programm besteht nur aus sogenannte Statements, also Kommando regeln.
2. Funktionen
einer Gruppe Statements, damit können Sie der Code strukturieren.
3. Klassen
mit dem Klassen können Sie virtuellen Objekten machen. Ein Objekt kann variablen und Methoden besitzen.
Python Crashkurs: Eine praktische, projektbasierte Programmiereinführung
Python Klass
Wir können virtuellen Objekten machen in Python. Ein virtuelles Objekt kann Methoden und variablen besitzen. Alle Objekten in Python werden durch ein klasse gemacht. Zum Beispiel:
class User: name = "" def __init__(self, name): self.name = name def sayHello(self): print "Hello, my name is " + self.name # create virtual objects james = User("James") david = User("David") eric = User("Eric") # call methods owned by virtual objects james.sayHello() david.sayHello() |
In diesem Code haben wir drei virtuelles Objekten: James, David und Eric. Alle Objekten werden durch die klasse User gemacht.

In dieser Klasse haben wir der Methoden sayHello() definiert. Wir können dieser Methoden in jede Objekte anrufen. Der __init__ Methode ist der sogenannte Konstruktor und wird immer angerufen als ein neues Objekt gemacht wird. Der variable in diesen klasse ist ‘name’ (nur eine). Jedes Objekt besitzt dieser variablen mit ein wert. Manchmal werden variablen Attributen genannt. Methoden können variablen von Objekten updaten.
Klasse variablen
Wir definieren einer Klasse genannt CoffeeMachine. Objekten besitzen der variablen ‘beans’ und ‘amount of water’. Beides sind von der Dateitypen integer. Wir definieren Methoden die diesen variablen verändern können
def addBean(self): self.bean = self.bean + 1 def removeBean(self): self.bean = self.bean - 1 |
Für die variablen water machen wir dasselbe. Wir haben dieser Code:
class CoffeeMachine: name = "" beans = 0 water = 0 def __init__(self, name, beans, water): self.name = name self.beans = beans self.water = water def addBean(self): self.beans = self.beans + 1 def removeBean(self): self.beans = self.beans - 1 def addWater(self): self.water = self.water + 1 def removeWater(self): self.water = self.water - 1 def printState(self): print("Name = " + self.name) print("Beans = " + str(self.beans)) print("Water = " + str(self.water)) pythonBean = CoffeeMachine("Python Bean", 83, 20) pythonBean.printState() print("") pythonBean.addBean() pythonBean.printState() |
Das erste teil von dieser Code definiert der Klasse. Wir machen ein virtuelles Objekten genannt ‘pythonBean’. Diesem Objekt besitzt Methoden und variablen. Als wir die Methoden anrufen können wir der interne variablen diesem Objekt verändern.
Datenkapselung
In ein Python Programm können wir Zugang zum Methoden und variablen limitieren. Damit verhindern wir das Data zufällig verändert.
Privaten Methoden
Wir machen einer Klasse mit zwei Methoden: drive() und updateSoftware(). Als wir einem Objekt machen von der Klasse car, ruft der die privaten Methoden __updateSoftware() an.
Wir können diesen Methoden nicht direkt beim Objekt anrufen, nur in der Klasse.
#!/usr/bin/env python class Car: def __init__(self): self.__updateSoftware() def drive(self): print 'driving' def __updateSoftware(self): print 'updating software' redcar = Car() redcar.drive() #redcar.__updateSoftware() not accesible from object. |
Der privaten Methoden __updateSoftware() kann nur in die Klasse angerufen werden, niemals außer der Klasse.
Privaten Variablen
Variablen können private sein. Einen privaten variablen kann nur in die Klasse mit einer Methode verändern
Objekten können wichtige Datei behalten und wir möchten nicht das die Daten ohne Klasse Methoden verändern wird.
Zum Beispiel:
#!/usr/bin/env python class Car: __maxspeed = 0 __name = "" def __init__(self): self.__maxspeed = 200 self.__name = "Supercar" def drive(self): print 'driving. maxspeed ' + str(self.__maxspeed) redcar = Car() redcar.drive() redcar.__maxspeed = 10 # will not change variable because its private redcar.drive() |
Wenn Sie die wert einen privaten variablen anderen willst, benutzt Sie ein setter Methoden. Ein setter Methode verändert die wert einer privaten variablen.
#!/usr/bin/env python class Car: __maxspeed = 0 __name = "" def __init__(self): self.__maxspeed = 200 self.__name = "Supercar" def drive(self): print 'driving. maxspeed ' + str(self.__maxspeed) def setMaxSpeed(self,speed): self.__maxspeed = speed redcar = Car() redcar.drive() redcar.setMaxSpeed(320) redcar.drive() |
Datenkapselung in Python
In Python gibt es:
- Privaten Variablen
- Privaten Methoden
- Public Variablen
- Public Methoden
In anderen Programmiersprachen gibt es auch protected Methoden, aber im Python nicht.
Vererbung
Klassen können Funktionalität und variablen von anderen Klassen erben (Englisch: Inheritance)
Wir definieren einer Klasse genannt User:
class User: name = "" def __init__(self, name): self.name = name def printName(self): print "Name = " + self.name brian = User("brian") brian.printName() |
Mit dieser Klasse machen wir ein Objekt genannt Brian. Wir machen einer Klasse genannt Programmer.
class Programmer(User): def __init__(self, name): self.name = name def doPython(self): print "Programming Python" |
Dieser Klasse seht aus wie ein Standard Klasse außerdem das User zwischen des Parameters steht. Das bedeutet das alle Funktionalität in die Klasse User jetzt auch zugänglich in der Programmer Klasse ist.
Vererbung beispiel
Ein Beispiel von Vererbung:
class User: name = "" def __init__(self, name): self.name = name def printName(self): print "Name = " + self.name class Programmer(User): def __init__(self, name): self.name = name def doPython(self): print "Programming Python" brian = User("brian") brian.printName() diana = Programmer("Diana") diana.printName() diana.doPython() |
Brian ist einer Instanz von die Klasse User und hat nur der Methoden printName(). Diana ist einer Instanz von die Klasse Programmer, dieser Klasse hat Vererbung von die Klasse User, und kann Methoden in die Klasse Programmer und User benutzen.
Polymorphie
Manchmal kommt ein Objekt in viele formen. Zum Beispiel, es gibt viele Sorten Schaltfläche aber sie haben dasselbe verhalten. Kurz: alle Schaltflächen haben ein onClick() Funktion aber die Schaltfläche sehen nicht alle dasselbe aus. Dieser Idee wird Polymorphie genannt.
Das Wort Polymorphie ist basiert auf Griechische Worten Poly (viele) und Morphism (formen).
Polymorphie mit einer Funktion
Wir machen zwei Klassen: Bear und Dog, beiden können ‘sprechen’. Wir machen zwei Instanzen von diesen Klassen und rufen der Methode sound() an.
class Bear(object): def sound(self): print("Groarrr") class Dog(object): def sound(self): print("Woof woof!") def makeSound(animalType): animalType.sound() bearObj = Bear() dogObj = Dog() makeSound(bearObj) makeSound(dogObj) |
Polymorphie mit einer abstrakten Klasse
Als Sie einen editor macht wissen Sie nicht ob der User ein PDF oder Word Dokument offenen möchtest. Alle Dokumenten brauchen dasselbe Funktionalität: zeigen, schließen usw.
for document in documents: print(document.name + ': ' + document.show()) |
Wir definieren eine (abstrakte) Klasse genannt Dokument. Dieser Klasse ist abstrakt: es definiert nur die Struktur. Wir definieren einer Funktion show() das durch beide Klassen PdfDocument und WordDocument implementiert wird.
class Document: def __init__(self, name): self.name = name def show(self): raise NotImplementedError("Subclass must implement abstract method") class Pdf(Document): def show(self): return 'Show pdf contents!' class Word(Document): def show(self): return 'Show word contents!' documents = [Pdf('Document1'), Pdf('Document2'), Word('Document3')] for document in documents: print(document.name + ': ' + document.show()) |

Wir haben ein abstrakten Struktur(document) und verschiedene Klassen die dieser Struktur implementieren. Wenn Sie ein neuen Type Dokument machen möchtest, kannst du einfach die Struktur von der Klasse Dokument benutzen.
Rekursive Programmierung
Einer Funktion ist rekursiv als es sich selbst wieder aufruft. Ein terminal Konditionen ist notwendig, sonst wird es immer dauern.
Python Crashkurs: Eine praktische, projektbasierte Programmiereinführung
Rekursion mit ein List
Wir können mit einem einfache Beispiel anfangen: nummern an einen liste hinzufügen Ohne Rekursive Methoden kann es so sein:
#!/usr/bin/env python def sum(list): sum = 0 # Add every number in the list. for i in range(0, len(list)): sum = sum + list[i] # Return the sum. return sum print(sum([5,7,3,8,10])) |
Dieser Methoden addiert alle Elementen und gibt die summe.
So können wir das rekursiv machen:
#!/usr/bin/env python def sum(list): if len(list) == 1: return list[0] else: return list[0] + sum(list[1:]) print(sum([5,7,3,8,10])) |
Als die List nur ein Element hat, gibt es direkt der Antwort. Sonst, ruft er die sum() Funktion minus ein Element der liste. Wenn alle anrufen vorbei sind, gibt dieser Funktion der Antwort.
Fakultät mit Rekursion
Der mathematische Definition von Fakultät ist: n! = n * (n-1)!, if n > 1 and f(1) = 1. Zum Beispiel: 3! = 3 x 2 x 1 = 6. Wir können das in Python machen mit einer rekursiven Funktion.
#!/usr/bin/env python def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) print(factorial(3)) |
Als wir der factorial Funktion anrufen mit n=3, Antwort der Funktion mit n * factorial(n-1). Dieser Prozess wiederholt sich bis n=1. Als n==1 wahr ist, gibt der Funktion der Losung.
Limit
Jeder Funktion Anruf speichert der Computer im Memory. Also, so einer Funktion benutzt mehr Memory. Python wird das Enden nach 1000 anrufen. Wenn Sie diesem Beispiel ausfuhrt:
#!/usr/bin/env python def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) print(factorial(3000)) |
Bekommst du der Fehler Meldung:
RuntimeError: maximum recursion depth exceeded |
Wir können das Losen mit:
#!/usr/bin/env python import sys sys.setrecursionlimit(5000) def factorial(n): if n == 1: return 1 else: return n * factorial(n-1) print(factorial(3000)) |
Logdatei
Python logging
Logdatei hilft beim debugging und Entwicklung. Nach der Entwicklung können wir Sie auschalten. Eine weitere Möglichkeit besteht darin, ihn in einer Datei zu speichern. Beginnen wir mit einem einfachen Beispiel.
Alternative kurs
Logging example
import logging # print a log message to the console. logging.warning('This is a warning!') |
Ausgabe:
WARNING:root:This is a warning! |
zu speichern:
import logging logging.basicConfig(filename='program.log',level=logging.DEBUG) logging.warning('An example message.') logging.warning('Another message') |
Es gibt sogennante ‘degrees of severity’, wie wichtig ist die Fehler meldung?.
Degrees of severity
Wir können den Schweregrad setzen mit dieser Zeile:
logging.basicConfig(level=logging.DEBUG) |
Diese logging gibt es:
| Type | Beschreibung |
|---|---|
| DEBUG | Nur fur problemen aufspueren |
| INFO | Normales Prozess |
| WARNING | Etwas stimmt nicht |
| ERROR | Fehler |
| CRITICAL | Schwerer Fehler |
Die standard Einstellung ist Warnung, was bedeutet, dass andere Nachrichten ignoriert werden. Wenn Sie debug oder info möchten Sie drucken müssen die Einstellung wie folgt ändern:
import logging logging.basicConfig(level=logging.DEBUG) logging.debug('Debug message') |
Zeit im log
Sie können die Zeit Aktivieren mit der folgenden Codezeile:
logging.basicConfig(format='%(asctime)s %(message)s') |
Bespiel:
import logging logging.basicConfig(format='%(asctime)s %(message)s', level=logging.DEBUG) logging.info('Logging app started') logging.warning('An example logging message.') logging.warning('Another log message') |
Ausgabe:
2015-06-25 23:24:01,153 Logging app started 2015-06-25 23:24:01,153 An example message. 2015-06-25 23:24:01,153 Another message |