Diberikan kelas C dengan Python, bagaimana saya bisa menentukan di file mana kelas itu didefinisikan? Saya membutuhkan sesuatu yang dapat bekerja baik dari kelas C, atau dari contoh di luar C.
Alasan saya melakukan ini, adalah karena saya biasanya penggemar meletakkan file yang dimiliki bersama dalam folder yang sama. Saya ingin membuat kelas yang menggunakan cetakan Django untuk membuat dirinya sendiri sebagai HTML. Implementasi dasar harus menyimpulkan nama file untuk template berdasarkan nama file yang ditentukan kelasnya.
Katakanlah saya meletakkan LocationArtifact kelas di file "base / artifacts.py", maka saya ingin perilaku defaultnya adalah bahwa nama template adalah "base / LocationArtifact.html".
python
class
introspection
Staale
sumber
sumber
Jawaban:
Anda dapat menggunakan modul inspect , seperti ini:
sumber
getfile
saya harus menggunakan:inspect.getmodule(C.__class__)
inspect.getfile(C)
. JikaC
adalah kelas, makaC.__class__
mengacu keobject
, yang akan memunculkan pengecualianTypeError: <module 'builtins' (built-in)> is a built-in class
. Saya pikir hanya untuk contohc
yang ingin Anda gunakaninspect.getfile(c.__class__)
.metaclass=abc.ABCMeta
), karena ia mengembalikan/usr/local/lib/python3.7/abc.py
alih-alih file yang sesuai. Solusi dari @JarretHardie (di bawah) bekerja lebih baik.mencoba:
sumber
LocationArtifact
denganobj.__class__
where obj adalah instance LocationArtifact.Ini adalah pendekatan yang salah untuk Django dan benar-benar memaksakan sesuatu.
Pola aplikasi Django yang khas adalah:
sumber