Maison >développement back-end >Tutoriel Python >Comment ajouter et accéder à des méthodes d'instance en Python ?

Comment ajouter et accéder à des méthodes d'instance en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 17:38:10683parcourir

How Do I Add and Access Instance Methods in Python?

Accès aux méthodes d'instance

En Python, les objets ont deux types de méthodes : les fonctions et les méthodes liées. Les méthodes liées sont associées à une instance spécifique et transmettent l'instance comme premier argument lorsqu'elles sont appelées. Les fonctions, en revanche, ne sont pas liées et peuvent être modifiées à tout moment.

Pour illustrer la différence :

def foo():
    print("foo")

class A:
    def bar(self):
        print("bar")

a = A()

print(foo)  # <function foo at 0x00A98D70>
print(a.bar)  # <bound method A.bar of <__main__.A instance at 0x00A9BC88>>

Ajout de méthodes aux définitions de classe

Vous pouvez modifier les définitions de classe pour ajouter de nouvelles méthodes pour toutes les instances. Par exemple, ce qui suit ajoute une méthode fooFighters à la classe A :

def fooFighters(self):
    print("fooFighters")

A.fooFighters = fooFighters

a2 = A()
a2.fooFighters()  # fooFighters

# Also affects previously defined instances
a.fooFighters()  # fooFighters

Ajout de méthodes à des instances uniques

L'ajout de méthodes à des instances individuelles est plus complexe. La tentative suivante échoue car la fonction n'est pas liée à l'instance :

def barFighters(self):
    print("barFighters")

a.barFighters = barFighters

a.barFighters()  # TypeError: barFighters() takes exactly 1 argument (0 given)

Pour lier la fonction, utilisez la fonction MethodType du module types :

import types
a.barFighters = types.MethodType(barFighters, a)

a.barFighters()  # barFighters

# Other instances unaffected
a2.barFighters()  # AttributeError: A instance has no attribute 'barFighters'

Exploration plus approfondie des descripteurs et la programmation des métaclasses fournit des techniques plus avancées pour manipuler les méthodes objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn