21.5 Built-in Functions für Objektorientierung 

Tabelle 21.2 listet diejenigen Built-in Functions auf, die sich speziell auf Objekte und Klasse beziehen.
Tabelle 21.2 Built-in Functions für Objektorientierung
21.5.1 Funktionen für die Verwaltung der Attribute einer Instanz 

Um die Attribute einer Instanz zu verwalten, verwenden Sie die Funktionen setattr, getattr und delattr. Dabei kann auf ein Attribut zugegriffen werden, indem der Name des Attributs als String übergeben wird.
getattr(object, name, [default])
Diese Funktion gibt das Attribut mit dem Namen name von der Instanz object zurück, sofern dieses Attribut existiert. Falls default übergeben wurde, wird der Wert von default zurückgegeben, wenn das Attribut name nicht vorhanden ist.
Das folgende Beispiel greift mittels getattr auf ein vorhandenes und ein nicht vorhandenes Attribut zu. Dabei ist der Aufruf getattr(a, "X") gleichbedeutend mit a.X.
>>> class A:
... def __init__(self):
... self.X = 42
>>> a = A()
>>> getattr(a, "X")
42
>>> getattr(a, "Y", 404)
404
Ist das Attribut nicht vorhanden und wird kein Wert für default übergeben, wirft getattr eine AttributeError-Exception.
>>> getattr(a, "Y")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'Y'
setattr(object, name, value)
Diese Funktion setzt den Wert des Attributs name von der Instanz object auf den Wert value.
Das folgende Beispiel definiert eine Klasse, die zehn Attribute in einer Schleife anlegt.
>>> class B:
... def __init__(self):
... for i in range(10):
... setattr(self, "X{}".format(i), i)
>>> b = B()
>>> b.X3
3
>>> b.X8
8
Ein Aufruf der Form setattr(a, "X", wert) ist dabei äquivalent zu a.X = wert.
delattr(object, name)
Mit delattr können Attribute einer Instanz gezielt gelöscht werden. Wir betrachten erneut die Klasse B aus dem obigen Beispiel zu setattr:
>>> b = B()
>>> b.X4
4
>>> delattr(b, "X4")
>>> b.X4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'B' object has no attribute 'X4'
Der Aufruf delattr(b, "X4") hat dieselbe Wirkung wie del b.X4.
21.5.2 Funktionen für Informationen über die Klassenhierarchie 

In diesem Abschnitt gehen wir von folgendem Beispielprogramm aus:
class A:
pass
class B(A):
pass
class C(B):
pass
class D:
pass
a = A()
b = B()
c = C()
d = D()
isinstance(object, classinfo)
Diese Funktion prüft, ob object eine Instanz der Klasse(n) classinfo ist, und liefert dementsprechend entweder True oder False zurück. Dabei kann für den Parameter classinfo entweder eine einzelne Klasse oder ein Tupel mehrerer Klassen übergeben werden.
>>> isinstance(a, A)
True
>>> isinstance(a, (B,C))
False
>>> isinstance(a, (A,B,C))
True
Der Rückgabewert von isinstance ist auch dann True, wenn object die Instanz einer Klasse ist, die von einer der Klassen in classinfo erbt.
>>> isinstance(c, A)
True
>>> isinstance(c, (B,D))
True
issubclass(class_, classinfo)
Mit der Funktion issubclass kann geprüft werden, ob die Klasse[ 92 ](Der Unterstrich am Ende von class_ wurde deshalb eingefügt, damit der Parameter nicht mit dem Schlüsselwort class zur Definition einer Klasse kollidiert. ) class_ von einer der Klassen in classinfo abgeleitet wurde. Genau wie bei isinstance kann für classinfo entweder eine einzelne Klasse oder ein Tupel mehrerer Klassen übergeben werden.
>>> issubclass(B,A)
True
>>> issubclass(B,(D,A))
True
>>> issubclass(A,C)
False
>>> issubclass(D,(A,B,C))
False