Finden Methoden eines Python-Objekts auf 6 Arten

Sidrah Abdullah 10 Oktober 2023
  1. Methoden eines Python-Objekts mit der Methode dir finden
  2. Python-Objekttyp mit der Funktion type finden
  3. Python-Objekt-ID mit der Funktion id ermitteln
  4. Methoden eines Python-Objekts mit dem Modul inspect finden
  5. Python-Objekte mit der Methode hasattr() finden
  6. Objekte mit der Methode getattr() finden
Finden Methoden eines Python-Objekts auf 6 Arten

In der Python-Programmierung wird die Fähigkeit, Methoden eines Python-Objekts dynamisch zu finden, als Introspektion bezeichnet. Da alles in Python ein Objekt ist, können wir seine Objekte zur Laufzeit leicht herausfinden.

Wir können diese mit den eingebauten Funktionen und Modulen untersuchen. Es ist besonders nützlich, wenn wir die Informationen wissen möchten, ohne den Quellcode zu lesen.

Dieser Artikel behandelt die sechs einfachen Methoden, mit denen wir die Methoden eines Python-Objekts finden können. Tauchen wir ein.

Methoden eines Python-Objekts mit der Methode dir finden

Die erste Methode, um die Methoden zu finden, besteht darin, die Funktion dir() zu verwenden. Diese Funktion nimmt ein Objekt als Argument und gibt eine Liste von Attributen und Methoden dieses Objekts zurück.

Die Syntax für diese Funktion lautet:

# python 3.x
dir(object)

Zum Beispiel:

# python 3.x
my_object = ["a", "b", "c"]
dir(my_object)

Ausgabe:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

An der Ausgabe können wir erkennen, dass alle Methoden des Objekts zurückgegeben wurden.

Die mit einem doppelten Unterstrich beginnenden Funktionen werden Dunder-Methoden genannt. Diese Methoden werden Wrapper-Objekte genannt. Zum Beispiel würde die Funktion dict() die Methode __dict__() aufrufen.

Wir haben diese grundlegende Fahrzeug-Python-Klasse erstellt:

# python 3.x
class Vehicle:
    def __init__(self, wheels=4, colour="red"):
        self.wheels = wheels
        self.colour = colour

    def repaint(self, colour=None):
        self.colour = colour

Wenn wir ein Objekt dieser Klasse erstellen und die Funktion dir() ausführen, können wir die folgende Ausgabe sehen:

# python 3.x
['__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__', 'colour', 'repaint', 'wheels']

Wir können sehen, dass es alle Methoden sowie deren Attribute auflistet. Es zeigt die von uns erstellten Methoden, listet aber auch alle eingebauten Methoden dieser Klasse auf.

Darüber hinaus können wir auch überprüfen, ob die Methode aufrufbar ist, indem wir die Funktion callable() verwenden und das Objekt als Argument übergeben.

Python-Objekttyp mit der Funktion type finden

Die zweite Methode besteht darin, die Funktion type() zu verwenden. Die Funktion type() wird verwendet, um den Typ eines Objekts zurückzugeben.

Wir können jedes Objekt oder jeden Wert im Argument der Funktion type() übergeben. Zum Beispiel:

# python 3.x
print(type(my_object))
print(type(1))
print(type("hello"))

Dadurch wird die folgende Ausgabe angezeigt:

<class 'list'> 
<class 'int'> 
<class 'str'>

Die Funktion type() hat den Typ eines Objekts zurückgegeben.

Python-Objekt-ID mit der Funktion id ermitteln

Um die ID eines Objekts in Python herauszufinden, verwenden wir die Funktion id().

Diese Funktion gibt eine spezielle ID jedes Objekts zurück, das als Argument übergeben wird. Die ID ähnelt einem speziellen Platz im Speicher für dieses bestimmte Objekt.

Zum Beispiel:

# python 3.x
print(id(my_object))
print(id(1))
print(id("Hello"))

Wir erhalten eine ähnliche Ausgabe, nachdem wir diese Befehle ausgeführt haben:

140234778692576
94174513879552
140234742627312

Methoden eines Python-Objekts mit dem Modul inspect finden

Das Modul inspect ist eine weitere Methode, mit der wir Informationen über Live-Python-Objekte anzeigen können. Die Syntax für dieses Modul ist:

# python 3.x
import inspect

print(inspect.getmembers(object))

Der erste Schritt besteht darin, das Modul inspect zu importieren. Danach rufen wir die Funktion getmembers() aus dem Modul inspect auf und übergeben das Objekt als Argument.

Zum Beispiel:

# python 3.x
print(inspect.getmembers(my_object))
print(inspect.getmembers(Vehicle))

Im obigen Beispiel haben wir zwei Objekte untersucht: eine Liste und das Objekt der Fahrzeugklasse. Nach der Ausführung des Codes erhalten wir diese Ausgabe:

# python 3.x
[('__add__', <method-wrapper '__add__' of list object at 0x7f8af42b4be0>), ('__class__', <class 'list'>), ('__contains__', <method-wrapper '__contains__' of list object at 0x7f8af42b4be0>), ('__delattr__', <method-wrapper '__delattr__' of list object at 0x7f8af42b4be0>), ('__delitem__', <method-wrapper '__delitem__' of list object at 0x7f8af42b4be0>), ('__dir__', <built-in method __dir__ of list object at 0x7f8af42b4be0>), ('__doc__', 'Built-in mutable sequence.\n\nIf no argument is given, the constructor creates a new empty list.\nThe argument must be an iterable if specified.'), ('__eq__', <method-wrapper '__eq__' of list object at 0x7f8af42b4be0>), ('__format__', <built-in method __format__ of list object at 0x7f8af42b4be0>), ('__ge__', <method-wrapper '__ge__' of list object at 0x7f8af42b4be0>), ('__getattribute__', <method-wrapper '__getattribute__' of list object at 0x7f8af42b4be0>), ('__getitem__', <built-in method __getitem__ of list object at 0x7f8af42b4be0>), ('__gt__', <method-wrapper '__gt__' of list object at 0x7f8af42b4be0>), ('__hash__', None), ('__iadd__', <method-wrapper '__iadd__' of list object at 0x7f8af42b4be0>), ('__imul__', <method-wrapper '__imul__' of list object at 0x7f8af42b4be0>), ('__init__', <method-wrapper '__init__' of list object at 0x7f8af42b4be0>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b668d5a0>), ('__iter__', <method-wrapper '__iter__' of list object at 0x7f8af42b4be0>), ('__le__', <method-wrapper '__le__' of list object at 0x7f8af42b4be0>), ('__len__', <method-wrapper '__len__' of list object at 0x7f8af42b4be0>), ('__lt__', <method-wrapper '__lt__' of list object at 0x7f8af42b4be0>), ('__mul__', <method-wrapper '__mul__' of list object at 0x7f8af42b4be0>), ('__ne__', <method-wrapper '__ne__' of list object at 0x7f8af42b4be0>), ('__new__', <built-in method __new__ of type object at 0x55a6b668d5a0>), ('__reduce__', <built-in method __reduce__ of list object at 0x7f8af42b4be0>), ('__reduce_ex__', <built-in method __reduce_ex__ of list object at 0x7f8af42b4be0>), ('__repr__', <method-wrapper '__repr__' of list object at 0x7f8af42b4be0>), ('__reversed__', <built-in method __reversed__ of list object at 0x7f8af42b4be0>), ('__rmul__', <method-wrapper '__rmul__' of list object at 0x7f8af42b4be0>), ('__setattr__', <method-wrapper '__setattr__' of list object at 0x7f8af42b4be0>), ('__setitem__', <method-wrapper '__setitem__' of list object at 0x7f8af42b4be0>), ('__sizeof__', <built-in method __sizeof__ of list object at 0x7f8af42b4be0>), ('__str__', <method-wrapper '__str__' of list object at 0x7f8af42b4be0>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b668d5a0>), ('append', <built-in method append of list object at 0x7f8af42b4be0>), ('clear', <built-in method clear of list object at 0x7f8af42b4be0>), ('copy', <built-in method copy of list object at 0x7f8af42b4be0>), ('count', <built-in method count of list object at 0x7f8af42b4be0>), ('extend', <built-in method extend of list object at 0x7f8af42b4be0>), ('index', <built-in method index of list object at 0x7f8af42b4be0>), ('insert', <built-in method insert of list object at 0x7f8af42b4be0>), ('pop', <built-in method pop of list object at 0x7f8af42b4be0>), ('remove', <built-in method remove of list object at 0x7f8af42b4be0>), ('reverse', <built-in method reverse of list object at 0x7f8af42b4be0>), ('sort', <built-in method sort of list object at 0x7f8af42b4be0>)] [('__class__', <class '__main__.Vehicle'>), ('__delattr__', <method-wrapper '__delattr__' of Vehicle object at 0x7f8af813a350>), ('__dict__', {'wheels': 4, 'colour': 'red'}), ('__dir__', <built-in method __dir__ of Vehicle object at 0x7f8af813a350>), ('__doc__', None), ('__eq__', <method-wrapper '__eq__' of Vehicle object at 0x7f8af813a350>), ('__format__', <built-in method __format__ of Vehicle object at 0x7f8af813a350>), ('__ge__', <method-wrapper '__ge__' of Vehicle object at 0x7f8af813a350>), ('__getattribute__', <method-wrapper '__getattribute__' of Vehicle object at 0x7f8af813a350>), ('__gt__', <method-wrapper '__gt__' of Vehicle object at 0x7f8af813a350>), ('__hash__', <method-wrapper '__hash__' of Vehicle object at 0x7f8af813a350>), ('__init__', <bound method Vehicle.__init__ of <__main__.Vehicle object at 0x7f8af813a350>>), ('__init_subclass__', <built-in method __init_subclass__ of type object at 0x55a6b9617e20>), ('__le__', <method-wrapper '__le__' of Vehicle object at 0x7f8af813a350>), ('__lt__', <method-wrapper '__lt__' of Vehicle object at 0x7f8af813a350>), ('__module__', '__main__'), ('__ne__', <method-wrapper '__ne__' of Vehicle object at 0x7f8af813a350>), ('__new__', <built-in method __new__ of type object at 0x55a6b6698ba0>), ('__reduce__', <built-in method __reduce__ of Vehicle object at 0x7f8af813a350>), ('__reduce_ex__', <built-in method __reduce_ex__ of Vehicle object at 0x7f8af813a350>), ('__repr__', <method-wrapper '__repr__' of Vehicle object at 0x7f8af813a350>), ('__setattr__', <method-wrapper '__setattr__' of Vehicle object at 0x7f8af813a350>), ('__sizeof__', <built-in method __sizeof__ of Vehicle object at 0x7f8af813a350>), ('__str__', <method-wrapper '__str__' of Vehicle object at 0x7f8af813a350>), ('__subclasshook__', <built-in method __subclasshook__ of type object at 0x55a6b9617e20>), ('__weakref__', None), ('colour', 'red'), ('repaint', <bound method Vehicle.repaint of <__main__.Vehicle object at 0x7f8af813a350>>), ('wheels', 4)]

Python-Objekte mit der Methode hasattr() finden

Schließlich können wir auch die Methode hasattr() verwenden, um die Methoden eines Python-Objekts herauszufinden. Diese Funktion prüft, ob ein Objekt ein Attribut besitzt.

Die Syntax für diese Methode lautet:

# python 3.x
hasattr(object, attribute)

Die Funktion nimmt zwei Argumente an: Objekt und Attribut. Es prüft, ob das Attribut in diesem bestimmten Objekt vorhanden ist.

Zum Beispiel:

# python 3.x
print(hasattr(my_object, "__doc__"))

Diese Funktion gibt True zurück, wenn das Attribut existiert. Andernfalls wird False zurückgegeben. Sobald wir die Methode gefunden haben, können wir außerdem die Funktion help() verwenden, um ihre Dokumentation anzuzeigen.

Zum Beispiel:

# python 3.x
help(object.method)

Objekte mit der Methode getattr() finden

Im Gegensatz zur Methode hasattr() gibt die Methode getattr() den Inhalt eines Attributs zurück, wenn es für dieses spezielle Python-Objekt existiert.

Die Syntax für diese Funktion lautet:

# python 3.x
getattr(object, attribute)

Zum Beispiel:

# python 3.x
print(getattr(my_object, "__doc__"))

Ausgabe:

Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.

Aus der Ausgabe geht hervor, dass das Attribut vorhanden ist. Daher hat es seinen Inhalt mit Details zur Funktionsweise dieser Methode zurückgegeben.

Bisher haben wir uns mehrere Methoden zur Durchführung einer Objektintrospektion angesehen. Mit anderen Worten, wir haben die Methoden und Attribute eines Python-Objekts auf 5 verschiedene Arten aufgelistet.

Wenn wir diesem Artikel folgen, sollten wir in der Lage sein, Python-Objekte zu bewerten und Introspektion durchzuführen.

Wenn Ihnen dieser Leitfaden geholfen hat, teilen Sie ihn bitte mit.

Verwandter Artikel - Python Object