下面是 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.
Sebenarnya, anda akan memahami bahagian ini dengan melakukan eksperimen anda sendiri.
Mari kita mulakan daripada teks asal dan bahagikannya kepada dua perenggan untuk dibincangkan Perenggan pertama berkata:
Perenggan pertama artikel asal mengatakan bahawa apabila
instance method object
dipanggil, parameter pertama__func__
digantikan dahulu denganclass instance
dan kemudian dipanggil, dan kemudian memberikan contoh:Kami menggunakan contoh berikut untuk menggambarkan Di sini kami mempunyai kelas
Demo
, yang mempunyai fungsifoo
dan fungsibar
di bawahnya.Demo
Kategori:Sebenarnya:
Python untuk
foo
akan menjana fungsi am, yang akan dirujuk olehDemo.foo
.Apabila kita menulis
demo.foo
, Python akan serta-merta mencipta objek kaedah terikat:demo.foo
Objek kaedah ini adalah kaedah terikat untuk mengikat contohdemo
, jadidemo.foo.__self__
akan merujuk kepadademo
dan Python juga akan merekodkanDemo.foo
dalamdemo.foo.__func__
.Jadi apabila
demo.foo
ini dipanggil (demo.foo(1,2,3)
), ia sebenarnya akan memanggildemo.foo.__func__
dan menggunakandemo.foo.__self__
(sebenarnyademo
itu sendiri) sebagai parameter pertama.Jika ditunjukkan menggunakan kelas yang kami tulis, contohnya menjadi:
Lihat kod:
Keputusan ujian:
Baca perenggan kedua:
Idea utama perenggan kedua ialah apabila objek kaedah contoh datang daripada objek kaedah kelas,
self
contoh kelas yang wujud dalam akan menjadi kelas sendiri, dan kemudian Contoh lain:Kami juga menggunakan contoh untuk menggambarkan:
Python akan menjana
Demo.bar
untuk bar, iaitu objek kaedah terikat daripada objek kaedah kelas Pada asalnya,Demo.bar
adalah sepertiDemo.foo
Ia juga merupakan fungsi Python umum, tetapi melalui penghias (@classmethod
penghias), ia menjadi objek kaedah terikat Jika anda ingin memerhati fungsi umum asal, anda hanya boleh melihatnya dalamDemo.bar.__func__
. ia terikatDemo
kelas, jadiDemo.bar.__self__
akan merujuk kepada kelasDemo
.Jadi apabila
Demo.bar
dipanggil (Demo.bar(1)
), dia sebenarnya akan memanggilDemo.bar.__func__
dan menggunakanDemo.bar.__self__
(sebenarnyaDemo
dirinya) sebagai parameter pertama.Jika ditunjukkan menggunakan kelas yang kami tulis, contohnya menjadi:
Kod ujian:
Keputusan ujian:
Kesimpulan:
Dalam Python3, terdapat dua jenis fungsi dalam kelas, satu ialah objek fungsi umum, dan satu lagi ialah objek kaedah terikat
Kaedah instance ialah objek kaedah yang terdiri daripada fungsi umum yang terikat pada contoh, dan mehtod kelas ialah objek kaedah yang terdiri daripada fungsi umum yang terikat kepada kelas
kaedah terikat dipanggil, ia sebenarnya memanggil fungsi asal (dirakam dalam
__func__
), tetapi objek terikat akan digunakan sebagai parameter pertama (dirakam dalam__self__
) .Rujukan:
Perbezaan antara kaedah dan fungsi
Perbezaan cara untuk mencipta objek kaedah contoh dalam Python