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

Barbara Streisand
Lepaskan: 2024-10-18 11:55:02
asal
867 orang telah melayarinya

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

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

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!

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