下面是 Python 3.x language reference 中的一段话,大意是理解的,不过写不出一个这样的示例,求大神给个与这段话一致的示例:
When an instance method object is derived from a class method object, the “class instance” stored in self will actually be the class itself, so that calling either x.f(1) or C.f(1) is equivalent to calling f(C,1) where f is the underlying function.
En fait, vous comprendrez cette partie en faisant vos propres expériences.
Partons du texte original et divisons-le en deux paragraphes pour en discuter. Le premier paragraphe dit :
Le premier paragraphe de l'article original dit que lorsqu'un
instance method object
est appelé, le premier paramètre de__func__
est d'abord substitué dansclass instance
puis appelé, puis donne un exemple :Nous utilisons l'exemple suivant pour illustrer. Ici, nous avons une classe
Demo
, qui a une fonctionfoo
et une fonctionbar
en dessous.Demo
Catégorie :En fait :
Python pour
foo
générera une fonction générale, qui sera référencée parDemo.foo
.Lorsque nous écrivons
demo.foo
, Python créera instantanément un objet méthode lié :demo.foo
Cet objet méthode est une méthode liée. À quoi est-il lié ? pour lier l'instancedemo
, doncdemo.foo.__self__
fera référence àdemo
, et Python enregistrera égalementDemo.foo
dansdemo.foo.__func__
.Ainsi, lorsque ce
demo.foo
est appelé (demo.foo(1,2,3)
), il appellera en faitdemo.foo.__func__
et utiliserademo.foo.__self__
(en faitdemo
lui-même) comme premier paramètre.S'il est montré en utilisant la classe que nous avons écrite, son exemple devient :
Regardez le code :
Résultats des tests :
Lisez le deuxième paragraphe :
L'idée principale du deuxième paragraphe est que lorsque l'objet méthode d'instance provient de l'objet méthode de classe, la
self
instance de classe qui existe dans sera la classe lui-même, puis un autre exemple :Nous utilisons également des exemples pour illustrer :
Python générera
Demo.bar
pour bar, qui est un objet de méthode lié à partir de objet de méthode de classe À l'origine,Demo.bar
est exactement commeDemo.foo
Il. est également une fonction Python générale, mais grâce au décorateur (@classmethod
décorateur), elle devient un objet de méthode lié. Si vous souhaitez observer la fonction générale d'origine, vous ne pouvez la voir que dansDemo.bar.__func__
. il est lié à laDemo
classe, doncDemo.bar.__self__
fera référence à laDemo
classe.Ainsi, lorsque
Demo.bar
est appelé (Demo.bar(1)
), il appellera en faitDemo.bar.__func__
et utiliseraDemo.bar.__self__
(en faitDemo
lui-même) comme premier paramètre.S'il est montré en utilisant la classe que nous avons écrite, son exemple devient :
Code de test :
Résultats des tests :
Conclusion :
En Python3, il existe deux types de fonctions en classe, l'une est un objet de fonction générale et l'autre est un objet de méthode lié
La méthode instance est un objet méthode composé d'une fonction générale liée à une instance, et la classe mehtod est un objet méthode composé d'une fonction générale liée à une classe
liée est appelée, elle appelle en fait la fonction d'origine (enregistrée dans
__func__
), mais l'objet lié sera utilisé comme premier paramètre (enregistré dans__self__
).Références :
Différence entre les méthodes et les fonctions
Différence pour créer un objet méthode d'instance en Python