Methoden in Python
Methoden
Attribute eines Objektes, die zum Aufruf gedacht sind, werden auch als Methoden (jenes Objektes) bezeichnet.
- Konsolenprotokoll
( 1 ).bit_length
<built-in method bit_length of int object at 0x000007FEEC45D160>
Methoden kennen ihre Objekte
Methoden kennen im allgemeinen die Objekte, in denen sie enthalten sind. Daher kann der Wert des Aufrufs einer Methode von ihrem Objekt abhängen, ohne daß das Objekt als Argument angegeben werden muß.
- Konsolenprotokoll
( 1 ).bit_length()
1
( 2 ).bit_length()
2
Rückblende Wir hatten uns gegen Anfang des Kurses mit dem Thema der Informationsdarstellung mit Hilfe von Bits beschäftigt. Dort wurde auch die Frage angesprochen, wie viele Bits jeweils zur Darstellung von Zahlen einer bestimmten Größe benötigt werden.
Der erste Parameter einer Methode
Eine Methode ist eine Funktion, deren erster Parameter immer mit dem Objekt initialisiert wird, in dem sie enthalten ist. Dieses Objekt muß beim Aufruf der Methode nicht angegeben werden.
Methoden treten normalerweise als Attribute eines Objektes auf, und dieses Objekt ist dann normalerweise auch das Objekt, welches der Methode implizit als erstes Argument übergeben wird.
- Funktionen und Methoden
format( 'abc' )
'abc'
'abc'.format()
'abc'
Die Methode ›format‹ ergibt im wesentlich nur wieder den Text ihres ersten Arguments. Oben sehen wir einmal den Aufruf als Funktion und einmal als Methode.
Beim Aufruf der Methode »format« als Funktion müssen wir ihr den zurückzugebenden String als erstes Argument übergeben.
Die Methode ›format‹ erscheint als Attribut ›'abc'.format‹ des Strings ›'abc'‹. Gleichzeitig ist sie auch so mit diesem String ›'abc'‹ verbunden, daß er beim Aufruf automatisch an ihren ersten Parameter gebunden wird. Die Methode wird dann mit dem Klammeroperator »()« aufgerufen. Weil sie mit ›'abc'‹ aufgerufen wird, kennt sie diesen String nun, und kann ihn wie zuvor die Funktion ›format‹ ausgeben.
Etwas vereinfacht gesagt können wir den zweiten Aufruf also als eine Variante des ersten Ansehen, bei der das erste Argument nicht in die Klammern, sondern vor den Punkt geschrieben wurde.
Einige Programme sind aber nicht wie »format« sowohl als Funktion als auch als Methode verfügbar, sondern entweder nur als eine Funktion oder nur als eine Methode. Beispielsweise ist »lower« nur als eine Methode verfügbar.
- Die Methode ›lower‹
'ABC'.lower()
'abc'
lower( 'ABC' )
NameError: name 'lower' is not defined
Umgekehrt ist ›len‹ normalerweise nur eine Funktion, aber keine Methode.
- Die Funktion ›len‹
len( 'abc' )
3
'abc'.len()
AttributeError: 'str' object has no attribute 'len'
Wir nennen »A.B « auch „die Methode »B « des Objekts »A «“ (falls eine Auswertung von ›A.B ‹ möglich ist und eine Methode ergibt).
Das Objekt »A « nennen wir auch das Ziel (Zielobjekt, Zielstring, ...) des Aufrufs, und den Namen »B« auch das Verb des Aufrufs.
Es ist nicht immer möglich, sofort einen guten Grund dafür zu erkennen, warum ein bestimmtes Programm nun als Funktion oder als Methode eingerichtet wurde. Welche Programme Funktionen und welche Methoden sind, kann man aber immer der Dokumentation entnehmen.
Methodenaufrufe mit Argumenten
Wie Funktionsaufrufe, so können auch Methodenaufrufe Argumente haben.
Der Aufruf »count( 'F' )« zählt beispielsweise die Anzahl der »F« in seinem String.
Die Methode ›count‹ erhält dann den String vor dem Punkt als ersten Parameter und den String «'F'» als zweiten Parameter.
- Ein Beispiel
"FINISHED FILES ARE THE RESULT OF YEARS OF SCIENTIFIC STUDY.".count( 'F' )
Dies verdeutlicht nun noch einmal den Unterschied zwischen Parametern und Argumenten : Der String «'F'» ist das erste Argument des Aufrufs, aber er legt den Wert des zweiten Parameters der Methode fest. (Wir werden aber erst später sehen, wie wir eigene Methoden schreiben können.)
Bisher konnten wir nur Funktionen aufrufen, jetzt haben wir auch noch die Schreibweise von Aufrufen von Methoden kennengelernt. Dadurch erschließt sich uns nun die Möglichkeit zur Nutzung diverser Methoden.
Ausdrücklichere Methodenaufrufe ⃗
Obwohl wir uns vorstellen, daß ein Objekt alle seine Methoden enthält, sind die meisten Methoden doch nur einmal abgespeichert, und zwar in der Klasse des Objektes. Daher lassen sich die meisten Methoden eines Objekts aufrufen, indem man eine gleichnamige Methode der Klasse des Objekts aufruft, der dann allerdings das Objekt als weiteres (erstes) Argument übergeben werden muß.
- Ein Beispiel
s = "FINISHED FILES ARE THE RESULT OF YEARS OF SCIENTIFIC STUDY."
type( s ).count( s, 'F' )
Das Untersuchen von Objekten und ihren Methode
Auflisten der Attribute
Die Attribute eines Objektes können mit »dir« angezeigt werden.
- Konsolenprotokoll (Kürzungen mit »…« gekennzeichnet)
dir( "Wahrscheinlichkeit" )
[ … 'center', 'count', 'encode', … 'rstrip', 'split', 'splitlines' … ]
Wir hatten zuvor schon »dir« verwendet, um die Inhalte von Modulen zu betrachten. Der Grund dafür, daß dies damals möglich war, besteht einfach darin, daß ein Modul ein Objekt ist, und die Inhalte des Modules seine Attribute sind.
Ermitteln des Typs eines Attributes
Die Werte der Attributnamen sind ebenfalls wieder Objekte. Daher kann der Typ eines Attributs mit »type« angezeigt werden.
- Konsolenprotokoll (Kürzungen mit »…« gekennzeichnet)
type( "Wahrscheinlichkeit".splitlines )
<class 'builtin_function_or_method'>
Lesen der Dokumentation einer Methode
Die Dokumentation der Methoden läßt sich dann mit »help« sichten.
- Konsolenprotokoll
help( "Wahrscheinlichkeit".splitlines )
Help on built-in function splitlines:
splitlines(keepends=False) method of builtins.str instance
Return a list of the lines in the string, breaking at line boundaries.Line breaks are not included in the resulting list unless keepends is given and
true.
Lesen der Dokumentation zu einem Objekt
Normalerweise erhält man die Dokumentation zu einem Objekt, samt der Dokumentation der enthaltenen Methoden, indem man ›help‹ mit jenem Objekt aufruft.
- Konsolenprotokoll
help( 1 )
Help on int object:
class int(object)
| int([x]) -> integer
| int(x, base=10) -> integer
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.__int__(). For floating point
| numbers, this truncates towards zero.
|
| If x is not a number or if base is given, then x must be a string,
| bytes, or bytearray instance representing an integer literal in the
| given base. The literal can be preceded by '+' or '-' and be surrounded
| by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.
| Base 0 means to interpret the base from the string as an integer literal.
| >>> int('0b100', base=0)
| 4
|
| Built-in subclasses:
| bool
|
| Methods defined here:
|
| __abs__(self, /)
| abs(self)
|
Da Zeichenfolgen als Argumente von ›help‹ jedoch eine spezielle Bedeutung haben, verwendet man »help( str )«, um die Dokumentation von str-Objekten zu sehen.
- Konsolenprotokoll
help( "Wahrscheinlichkeit" )
No Python documentation found for 'Wahrscheinlichkeit'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.- Konsolenprotokoll (Kürzungen mit »…« gekennzeichnet)
help( str )
Help on class str in module builtins:
class str(object)…
| count(...)
| S.count(sub[, start[, end]]) -> int
|
| Return the number of non-overlapping occurrences of substring sub in
| string S[start:end]. Optional arguments start and end are
| interpreted as in slice notation.…
| index(...)
| S.index(sub[, start[, end]]) -> int
|
| Return the lowest index in S where substring sub is found,
| such that sub is contained within S[start:end]. Optional
| arguments start and end are interpreted as in slice notation.
|
| Raises ValueError when the substring is not found.…
Die Dokumentation der Klassen der Standardbibliothek ist auch in der PDF-Datei »library.pdf«, auf Webseiten und über verschiedene mitgelieferte Programme zu finden.
Finden aller Standardmethoden mit einem bestimmten Namen
Unter einer „Standardmethode“ verstehen wir hier eine Methode aus der Standardbibliothek (wie in der Datei »library.pdf« beschrieben).
Alle Standardmethoden mit einem bestimmten Namen findet man im Register der PDF-Dokumentation der Standardbibliothek.
- Beispielauszug aus dem Register für den Namen »read«, die Nummern sind Seitenzahlen
read() (asyncio.StreamReader method), 894
read() (chunk.Chunk method), 1385
read() (codecs.StreamReader method), 164
read() (configparser.ConfigParser method), 537
read() (http.client.HTTPResponse method), 1276
read() (imaplib.IMAP4 method), 1291
read() (in module os), 578
read() (io.BufferedIOBase method), 622
read() (io.BufferedReader method), 625
read() (io.RawIOBase method), 621
read() (io.TextIOBase method), 626
read() (mimetypes.MimeTypes method), 1146
read() (mmap.mmap method), 1053
read() (ossaudiodev.oss_audio_device method), 1388
read() (ssl.MemoryBIO method), 1024
read() (ssl.SSLSocket method), 1005
read() (urllib.robotparser.RobotFileParser method), 1268
read() (zipfile.ZipFile method), 499
Funktionen in Modulen
Funktionen, die in Modulen eingetragen sind, sind normalerweise keine Methoden des Moduls.
- Konsolenprotokoll
( 1 ).bit_length
<built-in method bit_length of int object at 0x000007FEEC45D160>
math.floor
<built-in function floor>