Rumah > pembangunan bahagian belakang > Tutorial Python > Cara Melewati Medan Kelas kepada Penghias Kaedah Kelas

Cara Melewati Medan Kelas kepada Penghias Kaedah Kelas

Mary-Kate Olsen
Lepaskan: 2024-10-18 12:23:03
asal
371 orang telah melayarinya

How to Pass Class Field to Class Method Decorator

Melalui Medan Kelas kepada Penghias Kaedah Kelas

Apabila cuba menghantar medan kelas kepada penghias pada kaedah kelas, anda mungkin menghadapi ralat menyatakan bahawa medan itu tidak wujud. Ini timbul kerana anda cuba melepasi medan pada masa definisi kelas, tetapi ia mungkin tidak tersedia pada peringkat itu.

Penyelesaian 1: Semakan Masa Jalan

Untuk menyelesaikan masalah ini, pertimbangkan untuk menyemak medan semasa masa jalan. Ini boleh dicapai dengan mengubah suai penghias untuk memintas hujah kaedah, di mana hujah pertama akan menjadi contoh. Atribut instance kemudiannya boleh diakses menggunakan .:

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

class Client(object):
    def __init__(self, url):
        self.url = url

    @check_authorization
    def get(self):
        print('get')

Client('http://www.google.com').get()</code>
Salin selepas log masuk

Penyelesaian 2: Nama Atribut sebagai Rentetan

Jika anda ingin mengelakkan pengekodan keras nama atribut dalam penghias , anda boleh menghantarnya sebagai rentetan:

<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

Atas ialah kandungan terperinci Cara Melewati Medan Kelas kepada Penghias Kaedah Kelas. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan