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

DDD
Lepaskan: 2024-10-18 12:03:56
asal
317 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!