Bagaimana cara mengetahui nama kelas yang membuat instance dari objek dengan Python jika fungsi yang saya lakukan ini adalah kelas dasar dari mana kelas instance telah diturunkan?
Berpikir mungkin modul inspeksi mungkin membantu saya di sini, tetapi sepertinya tidak memberi saya apa yang saya inginkan. Dan pendek parsing __class__
anggota, saya tidak yakin bagaimana mendapatkan informasi ini.
Jawaban:
Sudahkah Anda mencoba
__name__
atribut kelas? yaitutype(x).__name__
akan memberi Anda nama kelas, yang saya pikir adalah apa yang Anda inginkan.Jika Anda masih menggunakan Python 2, perhatikan bahwa metode di atas hanya berfungsi dengan kelas gaya baru (dalam Python 3+ semua kelas adalah kelas "gaya baru"). Kode Anda mungkin menggunakan beberapa kelas gaya lama. Berikut ini berfungsi untuk keduanya:
sumber
dir(x.__class__)
tidak mencantumkannya?__class__
atastype
metode? Seperti:type(x).__name__
. Bukankah memanggil anggota garis bawah dua kali secara langsung tidak disarankan? Saya tidak bisa melihat jalan keluar menggunakan__name__
.__class__
secara langsung agar kompatibel dengan kelas gaya lama, karena tipenya hanyainstance
.def typename(x): return type(x).__name__
Apakah Anda ingin nama kelas sebagai string?
sumber
Tipe() ?
sumber
self.__class__.__name__
bukannyatype(self).__name__
mendapatkan perilaku yang sama. Kecuali ada sesuatutype()
fungsi yang tidak saya sadari?type(item)
pada item daftar, hasilnya akan<type 'instance'>
sambilitem.__class__.__name__
memegang nama kelas.Kode sampel di atas (ketika input dalam interpreter interaktif) akan menghasilkan
'__main__.A'
sebagai lawan dari'A'
yang dihasilkan jika__name__
atribut dipanggil. Dengan hanya memberikan hasilA.__class__
kepadastr
konstruktor, parsing ditangani untuk Anda. Namun, Anda juga dapat menggunakan kode berikut jika Anda menginginkan sesuatu yang lebih eksplisit.Perilaku ini dapat lebih disukai jika Anda memiliki kelas dengan nama yang sama yang didefinisikan dalam modul terpisah.
Kode sampel yang disediakan di atas diuji dalam Python 2.7.5.
sumber
Contoh:
sumber
Pertanyaan bagus.
Berikut adalah contoh sederhana berdasarkan GHZ yang mungkin membantu seseorang:
sumber
Atau Anda dapat menggunakan
classmethod
dekorator:Penggunaan :
sumber
Selain meraih
__name__
atribut khusus , Anda mungkin membutuhkan nama yang memenuhi syarat untuk kelas / fungsi tertentu. Ini dilakukan dengan meraih tipenya__qualname__
.Dalam kebanyakan kasus, ini akan persis sama, tetapi, ketika berhadapan dengan kelas yang bersarang / metode ini berbeda dalam output yang Anda dapatkan. Sebagai contoh:
Karena introspeksi adalah apa yang Anda cari, ini selalu ingin Anda pertimbangkan.
sumber
__qualname__
ini untuk Python 3.3+__qualname__
vs__name__
: stackoverflow.com/questions/58108488/what-is-qualname-in-pythonUntuk mendapatkan instance classname:
atau
keduanya sama
sumber