Diberikan kelas Foo
(apakah itu kelas gaya baru atau tidak), bagaimana Anda menghasilkan semua kelas dasar - di mana saja dalam hierarki warisan - issubclass
dari mana?
python
class
inheritance
oop
introspection
Sridhar Ratnakumar
sumber
sumber
inspect.getmro(obj)
bukaninspect.getmro(type(obj))
.Lihat
__bases__
properti yang tersedia di pythonclass
, yang berisi tuple kelas pangkalan:sumber
getmro
secara eksplisit mengatakan "Tidak ada kelas yang muncul lebih dari satu kali dalam tuple ini"?__bases__
hanya naik satu level . (Seperti utilitas rekursif Anda menyiratkan, tetapi pandangan sekilas pada contoh mungkin tidak mengambil itu.)inspect.getclasstree()
akan membuat daftar kelas dan basisnya. Pemakaian:sumber
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
Anda bisa menggunakan
__bases__
tuple dari objek kelas:Tuple yang dikembalikan oleh
__bases__
memiliki semua kelas dasarnya.Semoga ini bisa membantu!
sumber
__bases__
perhatikan bahwa dengan python 3.x setiap kelas mewarisi dari kelas objek dasar.
sumber
Menurut dokumen Python , kita juga bisa menggunakan
class.__mro__
atribut atauclass.mro()
metode:sumber
Meskipun jawaban Jochen sangat membantu dan benar, karena Anda dapat memperoleh hierarki kelas menggunakan metode .getmro () pada modul inspect, penting juga untuk menyoroti bahwa hierarki warisan Python adalah sebagai berikut:
ex:
Kelas warisan
ex:
Kelas yang diwarisi
Satu kelas dapat mewarisi dari yang lain - Kelas yang diatribusikan diwarisi - khususnya, metodenya diwarisi - ini berarti bahwa instance dari kelas pewarisan (anak) dapat mengakses yang dikaitkan dengan kelas yang diwarisi (induk)
instance -> class -> kemudian kelas yang diwarisi
menggunakan
akan menunjukkan kepada Anda hierarki, dalam Python.
sumber