Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menggunakan Penghias Harta dengan Kaedah Kelas dalam Python?

Bagaimanakah Saya Boleh Menggunakan Penghias Harta dengan Kaedah Kelas dalam Python?

Susan Sarandon
Lepaskan: 2024-11-27 12:03:11
asal
140 orang telah melayarinya

How Can I Use Property Decorators with Class Methods in Python?

Menggunakan Penghias Harta dengan Kaedah Kelas (kaedah kelas)

Penghias harta() dalam Python membenarkan seseorang mentakrifkan harta pada kelas, yang menyediakan akses kepada sesuatu yang khusus atribut. Walau bagaimanapun, apabila menggunakan penghias property() dengan kaedah yang ditandakan sebagai kaedah kelas menggunakan @classmethod, isu timbul kerana kaedah kelas tidak boleh dipanggil pada kejadian.

Penyelesaian untuk Python 2 dan Python 3 (termasuk 3.9-3.10)

Memandangkan sifat dalam Python beroperasi pada instance dan bukannya kelas, penyelesaian boleh dilaksanakan menggunakan metaclass. Dalam Python metaclass bertanggungjawab untuk mencipta kelas secara dinamik dan boleh digunakan untuk menambah sifat pada kelas itu sendiri. Berikut ialah coretan kod yang diubah suai sedikit:

class foo(object):
    _var = 5
    class __metaclass__(type):  # Metaclass definition (Python 2 syntax)
        @property
        def var(cls):
            return cls._var
        @var.setter
        def var(cls, value):
            cls._var = value

# Access and modify the class-level property using the class name
foo.var  # Get the initial value
foo.var = 3  # Set the value
Salin selepas log masuk

Dengan mentakrifkan sifat dalam metaclass, ia mempengaruhi kelas itu sendiri, membolehkannya memiliki sifat peringkat kelas yang boleh diakses melalui nama kelas.

Kaedah Alternatif untuk Python 3.8 dan Ke Atas

Dalam Python versi 3.8 dan ke atas, @classmethod decorator boleh digunakan bersama dengan property() decorator. Coretan kod berikut menunjukkan:

class Foo(object):
    _var = 5

    @classmethod
    @property
    def var(cls):
        return cls._var

    @var.setter
    @classmethod
    def var(cls, value):
        cls._var = value

# Access and modify the class-level property using the class name
Foo.var  # Get the initial value
Foo.var = 3  # Set the value
Salin selepas log masuk

Dalam kes ini, kedua-dua @classmethod dan @property penghias boleh digunakan pada kaedah yang sama, membenarkan takrifan sifat peringkat kelas menggunakan kaedah kelas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penghias Harta dengan Kaedah Kelas 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