Attributausdrücke
Attributausdrücke
Für »getattr( math, 'floor' )« kann auch die Schreibweise »math.floor« verwendet werden.
- Konsolenprotokoll
math.floor( 2.2 )
2
(Im Falle von »getattr( math, 'floor' )« könnte das zweite Argument auch eine Zeichenfolge sein, die erst während der Auswertung ermittelt wird. Bei Verwendung der Schreibweise »math.floor« ist der Attributname hingegen immer schon durch den Quelltext festgelegt.)
Attribute von Numeralia
Da der Punkt hinter einer ganzen Zahl als Dezimalpunkt gedeutet wird, müssen ganzzahlige Numeralia eingeklammert werden, wenn ihnen ein Attributpunkt folgen soll.
- Konsolenprotokoll
2.bit_length()
SyntaxError: invalid syntax
- Konsolenprotokoll
( 2 ).bit_length()
2
Zuweisungen an Attribute
An Stelle von »setattr( f, "a", "b" )« kann auch die Schreibweise »f.a = "b"« verwendet werden. In diesem Falle gibt der Attributausdruck auf der linken Seite des Gleichheitszeichens eine Bindungsstelle an, an welche dann das Objekt der rechten Seite gebunden wird.
- Protokoll
o = lambda: None
hasattr( o, "Beispiel" )
False
o.Beispiel = 427
hasattr( o, "Beispiel" )
True
getattr( o, "Beispiel" )
427
Importstil
Es ist in der Regel besser, Modulnamen zu importieren und dann Attributausdrücke zu verwenden, weil dadurch an der Stelle der Verwendung das Herkunftsmodul deutlich gemacht und insgesamt weniger viele verschiedene Namen importiert werden (es ist übersichtlicher, wenn weniger Namen in der Bindungstabelle unseres Moduls eingetragen sind).
- in bibliotheksfähigem Code bevorzugt
import math
print( math.pi )
3.141592653589793
- in bibliotheksfähigem Code weniger üblicher
from math import pi
print( pi )
3.141592653589793
Reparieren von Modulen ⃗
Es ist im Grund auch möglich, die Attribute in einem anderen Modul zu verändern. Jedoch macht man davon nur in Notfällen gebrauch, wenn es keine andere Möglichkeit gibt, um etwas zu erreichen. Beispielsweise zur Beseitigung von Fehlern in fremden Moduln.
- Flicken von »math«
from math import pi
pi = 3
print( pi )
3
from math import pi
print( pi )
3.141592653589793
import math
math.pi = 3
print( math.pi )
3
from math import pi
print( pi )
3
import math
print( math.pi )
3
Übungsaufgaben
/ Übungsaufgabe
Wir nehmen an, daß in einem Skript oder einer Sitzung zunächst die Anweisung »import datetime« ausgeführt wurde.
Welchen Typ hat dann das Objekt ›datetime‹? (Versuchen Sie, dies durch Ausführung von Anweisungen herauszufinden.)
Welchen Typ hat das Objekt ›datetime.datetime‹? (Versuchen Sie, dies durch Ausführung von Anweisungen herauszufinden.)
Welchen Typ hat das Objekt ›datetime.datetime.now()‹? (Versuchen Sie, dies durch Ausführung von Anweisungen herauszufinden.)
Welche Attribute enthält dieses Objekt? (Versuchen Sie, eine Anweisung einzugeben, welche die Attribute des Objekts ausgibt.)
Versuchen Sie nun zu ermitteln, wie Sie die aktuelle Stunde der Uhrzeit ausgeben können. (Versuchen Sie, dies durch Ausprobieren von Anweisungen herauszufinden.) Um 9.28 Uhr sollte sich beispielsweise «9» ergeben.