Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menentukan Sifat Kelas dalam Python: Adakah terdapat penghias @classproperty serupa dengan @classmethod?

Bagaimana untuk Menentukan Sifat Kelas dalam Python: Adakah terdapat penghias @classproperty serupa dengan @classmethod?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 13:47:02135semak imbas

How to Define Class Properties in Python: Is there a @classproperty decorator similar to @classmethod?

Cara Mentakrifkan Sifat Kelas dalam Python

Dalam Python, anda boleh menambah kaedah pada kelas menggunakan penghias @classmethod. Tetapi adakah terdapat mekanisme yang sama untuk menentukan sifat kelas?

Sudah tentu. Python menyediakan penghias @classproperty untuk tujuan ini. Sintaks dan penggunaannya hampir sama dengan @classmethod:

class Example(object):
    the_I = 10
    
    @classproperty
    def I(cls):
        return cls.the_I

Penghias @classproperty mencipta sifat kelas bernama I. Anda boleh mengakses sifat ini terus pada kelas itu sendiri, seperti:

Example.I  # Returns 10

Jika anda ingin menentukan penetap untuk harta kelas anda, anda boleh menggunakan penghias @classproperty.setter:

@I.setter
def I(cls, value):
    cls.the_I = value

Kini anda boleh menetapkan sifat kelas secara terus:

Example.I = 20  # Sets Example.the_I to 20

Pendekatan Alternatif: ClassPropertyDescriptor

Jika anda lebih suka pendekatan yang lebih fleksibel, pertimbangkan untuk menggunakan kelas ClassPropertyDescriptor. Begini caranya:

class ClassPropertyDescriptor(object):

    def __init__(self, fget, fset=None):
        self.fget = fget
        self.fset = fset

    # ... (method definitions)

def classproperty(func):
    return ClassPropertyDescriptor(func)

Dengan pendekatan ini, anda boleh mentakrifkan sifat kelas seperti berikut:

class Bar(object):

    _bar = 1

    @classproperty
    def bar(cls):
        return cls._bar

Anda boleh menetapkan sifat kelas menggunakan penetapnya (jika ditakrifkan) atau dengan mengubah suai atribut asasnya:

Bar.bar = 50
Bar._bar = 100

Penyelesaian yang diperluas ini memberikan lebih kawalan dan fleksibiliti apabila bekerja dengan sifat kelas dalam Python.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Sifat Kelas dalam Python: Adakah terdapat penghias @classproperty serupa dengan @classmethod?. 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