Methoden in Python (Methoden in Python), Lektion, Seite 724676
https://www.purl.org/stefan_ram/pub/methoden_in_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

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>

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724676 stefan_ram:724676 Methoden in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724676, slrprddef724676, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/methoden_in_python