Klasse und Objekt in Python
1. Objektsorientiert im Python
Python ist eine verfahren-orientierte Programmiersprache (Procedural-oriented), gleichzeitig ist eine objekt-orientierte Programmiersprache (Object Oriented).
Procedural-oriented
Procedural- oriented wird durch die Benutzung der Funktion im Python geäußert. Sie können die Funktionen definieren und die Funktionen können in die anderen Modulen im Python Programm benutzt werden
Object Oriented
Object Oriented im Python wird durch die Benutzung der Klasse (class) geäußert, Sie können eine Klasse definieren und die Klasse ist eine Prototype um ein Objekt (object/instance) zu erstellen.
2. Die Klasse im Python erstellen
Die Syntax zur Erstellung einer Klasse
** class syntax **
class ClassName:
'Brief description of the class (Optional)'
# Code ...
- Sie benutzen das Schlusselwort class um eine Klasse zu definieren, danach ist der Name von der Klasse und die Doppeltpunkt ( : ). Die erste Zeile im Körper der Klasse ist die String zur kurzen Bezeichnung über dieser Klasse (nicht obligatorisch), Sie können den String durch ClassName.__doc__ zugreifen.
- Im Körper der Klasse können Sie die Attribute, die Methode und die Constructor anmelden
Die Attribute
Die Attribute ist ein Mitglieder der Klasse. Wie, ein Rechteck hat 2 Attributes width und height (die Breite und die Höhe).
Methode (Method):
- Die Methode von Klasse ist so ähnlich wie eine normale Funktion, aber sie ist eine Funktion der Klasse. Sie sollen durch ein Objekt aufrufen um sie zu benutzen.
- Der erste Parameter der Methode ist immer self (ein Schlusselwort deutet diese Klasse an).
Der Constructor
- Der Constructor ist eine besondere Funktion der Klasse, er hat immer den Name von __init__
- Der erste Parameter vom constructor ist immer self (ein Schlusselwort deutet diese Klasse an
- Der Constructor wird zur Erstellung eines Objekt benutzt.
- Constructor wies die Wert der Parameter an die Attributes vom erstellten Objekt zu.
- Sie können maximal ein Constructor in der Klasse definieren.
- Wenn die Klasse den Constructor nicht definiert wird, sieht Python standardmäßig ihn als einen Default Constructor __init__(self), mit dem leeren Körper
rectangle.py
# Eine Klasse stimuliert einen Rechsteck.
class Rectangle :
'This is Rectangle class'
# Eine Methode wird benutzt um einen Constructor zu erstellen.
def __init__(self, width, height):
self.width= width
self.height = height
def getWidth(self):
return self.width
def getHeight(self):
return self.height
# Eine Methode für die Kalkulation der Fläche
def getArea(self):
return self.width * self.height
Erstellen Sie ein Objekt aus der Klasse Rectangle:
testRectangle.py
from rectangle import Rectangle
# 2 Objekte erstellen: r1 & r2
r1 = Rectangle(10,5)
r2 = Rectangle(20,11)
print ("r1.width = ", r1.width)
print ("r1.height = ", r1.height)
print ("r1.getWidth() = ", r1.getWidth())
print ("r1.getArea() = ", r1.getArea())
print ("-----------------")
print ("r2.width = ", r2.width)
print ("r2.height = ", r2.height)
print ("r2.getWidth() = ", r2.getWidth())
print ("r2.getArea() = ", r2.getArea())
Was passiert wenn Sie ein Objekt aus einer Klasse erstellen?
Wenn Sie ein Objekt der Klasse Rectangle erstellen, wird der Constructor dieser Klasse aufgeruft um ein Objekt zu erstellen und seine Attribute werden die Wert aus Parameter zugewiesen . Es ist so ähnlich wie das folgende Beispiel
3. Default Parameter im Constructor
Im Unterschied zu anderen Sprache hat die Klasse im Python maximal einen Constructor. Aber Python genehmigt den Default Parameter
Beachten Sie: Alle die obligatorischen Parameter (required parameters) müssen vor dem Default Parameter gestellt
person.py
class Person :
# Den Parameter age und gender hat die Default-Wert
def __init__ (self, name, age = 1, gender = "Male" ):
self.name = name
self.age = age
self.gender= gender
def showInfo(self):
print ("Name: ", self.name)
print ("Age: ", self.age)
print ("Gender: ", self.gender)
Zum Beispiel
testPerson.py
from person import Person
# Ein Objekt Person erstellen
aimee = Person("Aimee", 21, "Female")
aimee.showInfo()
print (" --------------- ")
# Default age, gender .
alice = Person( "Alice" )
alice.showInfo()
print (" --------------- ")
# Default gender.
tran = Person("Tran", 37)
tran.showInfo()
4. Der Vergleich der Objekte
Im Python wenn Sie ein Objekt durch den Constructor erstellen, wird eine echte Entität im Speicher erstellt. Sie hat eine bestimmten Addresse.
Eine Mathematik von Zuweisung des Objekt AA durch Objekt BB erstellt kein Entität im Speicher, das ist nur die Addresse von AA nach der Addresse von BB anzeigen.
Eine Mathematik von Zuweisung des Objekt AA durch Objekt BB erstellt kein Entität im Speicher, das ist nur die Addresse von AA nach der Addresse von BB anzeigen.
Der Operator == ist für das Vergleich zwischen die Addresse von 2 gezeigten Objekte. Er gibt True zurück wenn 2 Objekte in gleichen Addresse im Speicher zeigen. Der Operator != ist für auch das Vergleich zwischen 2 Addresse der 2 Obkjekte. Er gibt True zurück wenn 2 Objekte in 2 unterschiedlichen Addresse zeigen
compareObject.py
from rectangle import Rectangle
r1 = Rectangle(20, 10)
r2 = Rectangle(20 , 10)
r3 = r1
# Der Vergleich der Addresse von r1 und r2
test1 = r1 == r2 # --> False
# Der Vergleich der Addresse von r1 und r3
test2 = r1 == r3 # --> True
print ("r1 == r2 ? ", test1)
print ("r1 == r3 ? ", test2)
print (" -------------- ")
print ("r1 != r2 ? ", r1 != r2)
print ("r1 != r3 ? ", r1 != r3)
5. Das Attribut
Im Python gibt es 2 ziemlich gleiche Begriffe, davon sollen Sie unterscheiden
- Die Eigenschaft (Attribute)
- Die Variable der Klasse
Analysieren Sie das folgende Beispiel um mehr einfach zu verstehen:
player.py
class Player:
# Die Variable der Klasse
minAge = 18
maxAge = 50
def __init__(self, name, age):
self.name = name
self.age = age
Die Eigenschaften (Attribute)
Die Objekte werden aus einer Klasse erstellt. Sie liegen in die unterschiedlichen Addresse im Speicher (memory), und ihre "gleichnamigen" Attribute haben auch die unterschiedlichen Addresse im Speicher . Wie das folgende Beispiel
testAttributePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
print (" ------------ ")
print ("Assign new value to player1.age = 21 ")
# Die neue Wert für das Attribute age vom player1 anweisen
player1.age = 21
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
Python genehmigt, eine neue Attribute für ein vorheriges Objekt zu erstellen. Zum Beispiel: das Objekt player1 und die neue Attribute mit der Name von address.
testNewAttributePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
# Ein Attribute mit den Name 'address' für player1.
player1.address = "USA"
print ("player1.name = ", player1.name)
print ("player1.age = ", player1.age)
print ("player1.address = ", player1.address)
print (" ------------------- ")
print ("player2.name = ", player2.name)
print ("player2.age = ", player2.age)
# player2 hat keine Attribute 'address' (Der Fehler passiert hier).
print ("player2.address = ", player2.address)
6. Die Funktion zum Zugang in Attribut
Normalerweise greifen Sie in die Attribute eines Objekt durch den Operator "die Punkt zu (zum Beispiel player1.name). Aber Python genehmigt Sie bei der Zugriff durch die Funktion
Die Funktion | Die Bezeichnung |
getattr(obj, name[, default]) | Rückgabe der Wert von der Attribute oder Rückgabe der Defaultwert wenn das Objekt keine Attribute hat |
hasattr(obj,name) | Prüfen, ob das Objekt die Attribute mit dem Parameter 'name' oder nicht |
setattr(obj,name,value) | Die Wert in die Attribute setzen. Wenn die Attribute nicht vorhanden sein, wird sie erstellt |
delattr(obj, name) | Die Attribute löschen |
testAttFunctions.py
from player import Player
player1 = Player("Tom", 20)
# getattr(obj, name[, default])
print ("getattr(player1,'name') = " , getattr(player1,"name") )
print ("setattr(player1,'age', 21): ")
# setattr(obj,name,value)
setattr(player1,"age", 21)
print ("player1.age = ", player1.age)
# Prüfen, ob player1 die Attribute addresse hat oder nicht?
hasAddress = hasattr(player1, "address")
print ("hasattr(player1, 'address') ? ", hasAddress)
# Die Attribute 'address' für das Objekt 'player1' erstellen.
print ("Create attribute 'address' for object 'player1'")
setattr(player1, 'address', "USA")
print ("player1.address = ", player1.address)
# Die Attribute 'address' löschen.
delattr(player1, "address")
7. Die verfügbaren Attribute der Klasse
Die Klasse vom Python sind der Nachfolger der Klasse object. Und deshalb erbt sie die folgenden Attributes
Die Attribute | Die Bezeichnung |
__dict__ | Die Information über diese Klasse ist kurz, verständlich wie ein Wörterbuch vorgestellt |
__doc__ | Rückgabe eines Bezeichnungstring über die Klasse oder Rückgabe von None wenn es nicht definiert wird |
__class__ | Rückgabe eines Objekt, das die Information über die Klasse enthaltet. Das Objekt hat viele nutzlichen Attribute, davon die Attribute __name__. |
__module__ | Rückgabe eines Modulename der Klasse oder Rückgabe "__main__" wenn die Klasse in laufenden Module definiert wird |
testBuildInAttributes.py
class Customer :
'This is Customer class'
def __init__(self, name, phone, address):
self.name = name
self.phone = phone
self.address = address
john = Customer("John",1234567, "USA")
print ("john.__dict__ = ", john.__dict__)
print ("john.__doc__ = ", john.__doc__)
print ("john.__class__ = ", john.__class__)
print ("john.__class__.__name__ = ", john.__class__.__name__)
print ("john.__module__ = ", john.__module__)
8. Die Variable der Klasse
Im Python ist der Begriff " die Variable der Klasse (Class's Variable)" ähnlich wie der Begriff Static Field von der anderen Sprache wie Java, CSharp. Die Variable der Klasse können durch den Name der Klasse oder durch das Objekt zugegriffem
Sie sollen die Variable der Klasse durch den Name der Klasse statt durch das Objekt zugreifen. Das hilft Ihnen bei der Vermeidung der Verwirrung zwischen "Die Variable der Klasse" und die Attributes
Jede Variable der Klasse hat eine Addresse im Speicher (memory). Und sie wird für alle Objekte der Klasse geteilt
testVariablePlayer.py
from player import Player
player1 = Player("Tom", 20)
player2 = Player("Jerry", 20)
# Durch den Name der Klasse zugreifen.
print ("Player.minAge = ", Player.minAge)
# Durch das Objekt zugreifen.
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)
print (" ------------ ")
print ("Assign new value to minAge via class name, and print..")
# Eine neue Wert für minAge durch die Klasse anweisen
Player.minAge = 19
print ("Player.minAge = ", Player.minAge)
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)
9. Die Liste der Mitglieder der Klasse oder des Objekt
Python bietet Sie eine Funktion dir, Die Funktion listiert die Methode, die Attributes, die Variable der Klasse oder des Objekt.
testDirFunction.py
from player import Player
# Die Liste der Attribute, der Methode und der Variable der Klasse Player ausdrucken
print ( dir(Player) )
print ("\n\n")
player1 = Player("Tom", 20)
player1.address ="USA"
# Die Liste der Attribute, der Methode und der Variable des Objekt 'player1' ausdrucken
print ( dir(player1) )
Zum Beispiel
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'maxAge', 'minAge']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'address', 'age', 'maxAge', 'minAge', 'name']
Anleitungen Python
- Lookup Python-Dokumentation
- Verzweigung in Python
- Die Anleitung zu Python Function
- Klasse und Objekt in Python
- Vererbung und Polymorphismus in Python
- Die Anleitung zu Python Dictionary
- Die Anleitung zu Python Lists
- Die Anleitung zu Python Tuples
- Die Anleitung zu Python Date Time
- Stellen Sie mit PyMySQL eine Verbindung zur MySQL-Datenbank in Python her
- Die Anleitung zu Python Exception
- Die Anleitung zu Python String
- Einführung in Python
- Installieren Sie Python unter Windows
- Installieren Sie Python unter Ubuntu
- Installieren Sie PyDev für Eclipse
- Konventionen und Grammatik-Versionen in Python
- Die Anleitung zum Python für den Anfänger
- Schleifen in Python
Show More