Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mendapatkan semula nama kaedah pemanggil dalam Python tanpa mengubah suai kaedah pemanggil?

Bagaimanakah saya boleh mendapatkan semula nama kaedah pemanggil dalam Python tanpa mengubah suai kaedah pemanggil?

Barbara Streisand
Barbara Streisandasal
2024-11-17 21:23:02498semak imbas

How can I retrieve the caller's method name in Python without modifying the caller method?

Mengambil semula Nama Kaedah Pemanggil dalam Python

Apabila bekerja dengan panggilan fungsi berbilang peringkat, ia boleh berguna untuk mengakses nama kaedah panggilan. Ini boleh menyediakan konteks yang berharga dalam kaedah yang dipanggil. Artikel ini meneroka cara untuk mendapatkan semula nama kaedah pemanggil dalam Python, mengelakkan sebarang pengubahsuaian pada kaedah pemanggil.

Menggunakan Inspect

Modul pemeriksaan Python menyediakan beberapa fungsi untuk mengakses maklumat tentang pemanggil. inspect.getframeinfo() dan fungsi berkaitan membolehkan kami menavigasi tindanan bingkai dan mendapatkan semula maklumat yang berkaitan.

Pelaksanaan

Di bawah ialah demonstrasi cara menggunakan inspect:

import inspect

def f1():
    f2()

def f2():
    curframe = inspect.currentframe()
    calframe = inspect.getouterframes(curframe, 2)
    print('caller name:', calframe[1][3])

f1()

Dalam contoh ini, nama pemanggil diambil dalam fungsi f2 menggunakan calframe pembolehubah. Nilai calframe1 mengandungi nama pemanggil (f1 dalam kes ini).

Awas

Adalah penting untuk ambil perhatian bahawa introspeksi, sementara berguna untuk penyahpepijatan dan pembangunan, tidak boleh diharap untuk tujuan berkaitan pengeluaran. Keputusannya mungkin dipengaruhi oleh pelbagai faktor dan harus didekati dengan berhati-hati dalam senario kritikal.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula nama kaedah pemanggil dalam Python tanpa mengubah suai kaedah pemanggil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn