Klasse und Objekt in Python

1- Object Oriented in 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- Create class in Python

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

# Rectangle.
class Rectangle :
    'This is Rectangle class'
 
  
    # Method to create object (Constructor)
    def __init__(self, width, height):
      
        self.width= width
        self.height = height
  
  
  
    def getWidth(self):      
        return self.width
  
  
    def getHeight(self):      
        return self.height
  
    # Method to calculate Area.
    def getArea(self):
      
        return self.width * self.height
      
Erstellen Sie ein Objekt aus der Klasse  Rectangle:
testRectangle.py
from rectangle import Rectangle

# Create 2 objects: 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- Constructor with default parameters

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 :

  
    # The age, gender parameter has a default value
    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

# Create object
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- Compare objects

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

# Compare the address of r1 and r2
test1 = r1 == r2 # --> False

# Compare the address of r1 and r2
test2 = r1 == r3 # --> True


print ("r1 == r2 ? ", test1)

print ("r1 == r3 ? ", test2)


print (" -------------- ")

print ("r1 != r2 ? ", r1 != r2)

print ("r1 != r3 ? ", r1 != r3)

5- Attributes

Im Python gibt es 2 ziemlich gleiche Begriffe, davon sollen Sie unterscheiden
  1. Die Eigenschaft (Attribute)
  2. Die Variable der Klasse
Analysieren Sie das folgende Beispiel um mehr einfach zu verstehen:
player.py
class Player:
   
    # Class's Variable
    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 ")

# Assgin new value to age attribute of player1
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)

# Create a new attribute named 'address' for 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 has no attribute 'address' (Error!!)
print ("player2.address = ", player2.address)

6- Function Attributes

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)

# Check player1 has 'address' attribute.
hasAddress =  hasattr(player1, "address")

print ("hasattr(player1, 'address') ? ", hasAddress)

# Create attribute 'address' for object 'player1'
print ("Create attribute 'address' for object 'player1'")
setattr(player1, 'address', "USA")

print ("player1.address = ", player1.address)


# Delete attribute 'address'.
delattr(player1, "address")

 

7- Built-In Class Attributes

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- Class's Variables

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)

 
# Access via class name.
print ("Player.minAge = ", Player.minAge)


# Access via object.
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)


print (" ------------ ")


print ("Assign new value to minAge via class name, and print..")

# Assgin new value to minAge via class name
Player.minAge = 19


print ("Player.minAge = ", Player.minAge)
print ("player1.minAge = ", player1.minAge)
print ("player2.minAge = ", player2.minAge)

 

9- List members of a class or object

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

# Print out list of attributes, methods, variables of class 'Player'
print ( dir(Player) )


print ("\n\n")

player1 = Player("Tom", 20)

player1.address ="USA"
 
# Print out list of attributes, methods, variables of object 'player1'
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- Delete Object

  • TODO