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>
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>
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!