「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python でクラス プロパティを定義する方法: @classmethod に似た @classproperty デコレータはありますか?

Python でクラス プロパティを定義する方法: @classmethod に似た @classproperty デコレータはありますか?

2024 年 11 月 8 日に公開
ブラウズ:478

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

Python でクラス プロパティを定義する方法

Python では、@classmethod デコレータを使用してクラスにメソッドを追加できます。しかし、クラス プロパティを定義するための同様のメカニズムはありますか?

確かに。 Python は、この目的のために @classproperty デコレータを提供します。その構文と使用法は、@classmethod:

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

@classproperty デコレーターは、I という名前のクラス プロパティを作成します。次のように、クラス自体でこのプロパティに直接アクセスできます。

Example.I  # Returns 10

クラス プロパティのセッターを定義したい場合は、@classproperty.setter デコレータを使用できます:

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

これで、クラス プロパティを直接設定できるようになりました:

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

別のアプローチ: ClassPropertyDescriptor

より柔軟なアプローチを希望する場合は、ClassPropertyDescriptor クラスの使用を検討してください。その仕組みは次のとおりです:

class ClassPropertyDescriptor(object):

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

    # ... (method definitions)

def classproperty(func):
    return ClassPropertyDescriptor(func)

このアプローチでは、次のようにクラス プロパティを定義できます:

class Bar(object):

    _bar = 1

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

クラス プロパティは、そのセッター (定義されている場合) を使用するか、その基になる属性を変更することで設定できます:

Bar.bar = 50
Bar._bar = 100

この拡張されたソリューションにより、Python でクラス プロパティを操作する際の制御性と柔軟性が向上しました。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3