Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghantar Medan Kelas kepada Penghias pada Kaedah Kelas sebagai Hujah?

Bagaimana untuk Menghantar Medan Kelas kepada Penghias pada Kaedah Kelas sebagai Hujah?

DDD
DDDasal
2024-10-18 12:03:56415semak imbas

How to Pass a Class Field to a Decorator on a Class Method as an Argument?

Menghiasi Kaedah Kelas dengan Hujah Kendiri

Untuk menghantar medan kelas kepada penghias pada kaedah kelas sebagai hujah, anda perlu mengakses medan pada masa jalan dan bukannya pada masa definisi kelas. Begini caranya:

1. Memintas Argumen Kaedah

Penghias boleh memintas argumen kaedah menggunakan fungsi pembalut. Hujah pertama kepada pembungkus ialah contoh (diri).

<code class="python">def check_authorization(f):
    def wrapper(*args):
        print(args[0].url)
        return f(*args)
    return wrapper</code>

2. Gunakan Getattr untuk Mengakses Medan Secara Dinamik

Sebagai alternatif, nama medan boleh dihantar kepada penghias sebagai rentetan dan diakses menggunakan getattr:

<code class="python">def check_authorization(attribute):
    def _check_authorization(f):
        def wrapper(self, *args):
            print(getattr(self, attribute))
            return f(self, *args)
        return wrapper
    return _check_authorization</code>

Dengan kaedah ini, penghias boleh dipanggil dengan nama atribut yang diingini sebagai hujah.

Contoh

<code class="python">@check_authorization("url")
def get(self):
    do_work()</code>

Dalam contoh ini, penghias akan mengakses atribut url contoh pada masa jalan.

Atas ialah kandungan terperinci Bagaimana untuk Menghantar Medan Kelas kepada Penghias pada Kaedah Kelas sebagai Hujah?. 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