Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Meluluskan Atribut Contoh kepada Penghias Kaedah Kelas dalam Python?

Bagaimana untuk Meluluskan Atribut Contoh kepada Penghias Kaedah Kelas dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-10-18 11:55:02871semak imbas

How to Pass Instance Attributes to Class Method Decorators in Python?

Menghiasi Kaedah Kelas dengan Hujah Kendiri

Dalam Python, kaedah kelas boleh dihiasi untuk menambah gelagat tambahan atau mengesahkan hujahnya. Walau bagaimanapun, menghantar atribut contoh sebagai hujah kepada penghias boleh menjadi mencabar.

Untuk menangani perkara ini, satu penyelesaian adalah untuk mendapatkan semula nilai atribut secara dinamik pada masa jalan dalam penghias. Begini cara anda boleh mencapai perkara ini:

<code class="python">from functools import wraps

def check_authorization(f):
    @wraps(f)
    def wrapper(*args):
        print(args[0].url)
        return f(*args)
    return wrapper

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

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

Client('http://www.google.com').get()</code>

Dalam contoh ini, penghias check_authorization memintas hujah kaedah dan mendapatkan semula atribut URL tika daripada argumen pertama (iaitu tika itu sendiri). Anda kemudiannya boleh menggunakan nilai atribut dalam penghias untuk melakukan sebarang semakan kebenaran yang diperlukan.

Untuk fleksibiliti yang lebih besar, anda boleh mengubah suai penghias untuk menerima nama atribut sebagai parameter:

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

Ini membolehkan anda menentukan nama atribut untuk disemak semasa masa jalan, memberikan anda lebih kawalan ke atas proses hiasan.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Atribut Contoh kepada Penghias Kaedah Kelas dalam Python?. 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