Rumah > pembangunan bahagian belakang > Tutorial Python > Cara Mengatasi Hujah Penghias dalam Python

Cara Mengatasi Hujah Penghias dalam Python

Susan Sarandon
Lepaskan: 2025-01-10 08:06:41
asal
706 orang telah melayarinya

How to Override Decorator Arguments in Python

Untuk mengubah suai hujah penghias dalam kaedah kelas anak yang diwarisi daripada kelas induk, anda mesti mengatasi kaedah itu sendiri secara eksplisit. Hanya mentakrifkan pembolehubah kelas baharu dengan nama yang sepadan tidak akan mengubah tingkah laku penghias. Hujah penghias terikat pada masa kaedah dihias, bukan apabila kelas dibuat seketika.

Contoh Ilustrasi

Kod Python berikut (test.py) menunjukkan ini:

<code class="language-python">def my_decorator_with_args(param1, param2):
    """Decorator accepting arguments"""
    def actual_decorator(func):
        def wrapper(self, *args, **kwargs):
            print(f"[Decorator] param1={param1}, param2={param2}")
            return func(self, *args, **kwargs)
        return wrapper
    return actual_decorator


class BaseClass:
    @my_decorator_with_args(param1="BASE_PARAM1", param2="BASE_PARAM2")
    def greet(self):
        print("Hello from BaseClass!")


class DerivedClass(BaseClass):
    """
    Attempting to override decorator arguments via class variables;
    however, since `greet()` isn't redefined, the parent's decorator remains active.
    """
    param1 = "DERIVED_PARAM1"
    param2 = "DERIVED_PARAM2"


class DerivedClassOverride(BaseClass):
    """
    Correctly overrides `greet()` to utilize modified decorator arguments.
    """
    @my_decorator_with_args(param1="OVERRIDE_PARAM1", param2="OVERRIDE_PARAM2")
    def greet(self):
        print("Hello from DerivedClassOverride!")


if __name__ == "__main__":
    print("=== BaseClass's greet ===")
    b = BaseClass()
    b.greet()

    print("\n=== DerivedClass's greet (no override) ===")
    d = DerivedClass()
    d.greet()

    print("\n=== DerivedClassOverride's greet (with override) ===")
    d_o = DerivedClassOverride()
    d_o.greet()
</code>
Salin selepas log masuk

Melaksanakan python test.py menghasilkan:

<code>=== BaseClass's greet ===
[Decorator] param1=BASE_PARAM1, param2=BASE_PARAM2
Hello from BaseClass!

=== DerivedClass's greet (no override) ===
[Decorator] param1=BASE_PARAM1, param2=BASE_PARAM2
Hello from BaseClass!

=== DerivedClassOverride's greet (with override) ===
[Decorator] param1=OVERRIDE_PARAM1, param2=OVERRIDE_PARAM2
Hello from DerivedClassOverride!</code>
Salin selepas log masuk

Ini jelas menunjukkan bahawa hanya dengan mentakrifkan semula kaedah (greet) dalam kelas kanak-kanak anda boleh berjaya mengatasi hujah penghias.

Atas ialah kandungan terperinci Cara Mengatasi Hujah Penghias dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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