Rumah >pembangunan bahagian belakang >Tutorial Python >Bolehkah Atribut Contoh Diluluskan sebagai Argumen kepada Penghias Kaedah Kelas dalam Python?
Melalui Medan Kelas kepada Penghias Kaedah Kelas
Dalam Python, kaedah kelas boleh dihias menggunakan penghias yang mengambil hujah tambahan. Walau bagaimanapun, persoalan timbul apabila cuba menghantar atribut contoh sebagai hujah kepada penghias ini.
Pertimbangkan contoh berikut:
<code class="python">class Client(object): def __init__(self, url): self.url = url @check_authorization("some_attr", self.url) def get(self): do_work()</code>
Niatnya adalah untuk menghantar atribut self.url kepada penghias kebenaran_semak . Walau bagaimanapun, Python menimbulkan ralat yang menunjukkan bahawa diri tidak wujud dalam skop definisi kelas.
Penyelesaian
Untuk menyelesaikan isu ini, seseorang boleh menangguhkan semakan atribut kepada masa jalan dengan memintas hujah kaedah dalam penghias. Argumen pertama kepada fungsi pembalut ialah contoh, membenarkan akses kepada atribut contoh.
<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() # Output: http://www.google.com # get</code>
Pendekatan Alternatif
Sebagai alternatif, seseorang boleh mengakses atribut secara dinamik dengan menghantar nama atribut sebagai rentetan kepada penghias. Ini menghapuskan keperluan untuk mengeraskan nama atribut khusus.
<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 Bolehkah Atribut Contoh Diluluskan sebagai Argumen kepada Penghias Kaedah Kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!