codestory

Klasse und Objekt in Python

  1. Objektsorientiert im Python
  2. Die Klasse im Python erstellen
  3. Default Parameter im  Constructor
  4. Der Vergleich der Objekte
  5. Das Attribut
  6. Die Funktion zum Zugang in Attribut
  7. Die verfügbaren Attribute der Klasse
  8. Die Variable der Klasse
  9. Die Liste der Mitglieder der Klasse oder des Objekt
  10. Das Objekt löschen

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.
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']

10. Das Objekt löschen

  • TODO