Menu
Coddy logo textTech

プロパティデコレータ

CoddyのPythonジャーニー「Object Oriented Programming」セクションの一部 — レッスン 10/64。

@property デコレータを使用すると、メソッドに属性のようにアクセスできるようになり、値の取得や設定を簡潔に行う方法が提供されます。

@property を使用したクラスの例を次に示します:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

円を作成し、プロパティにアクセスします:

my_circle = Circle(5)

通常の属性のようにプロパティにアクセスします:

print(my_circle.radius)
print(my_circle.area)

出力:

5
78.53975

プロパティにアクセスする際、括弧 () を使用しないことに注意してください。これらは属性のように見えますが、メソッドのコードを実行します。

値を変更できるようにセッターを追加します:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

これで、属性のように半径を設定できるようになります:

my_circle = Circle(5)
my_circle.radius = 10  # セッターを使用します
print(my_circle.radius)  # ゲッターを使用します

出力:

10

重要なポイント: @property はメソッドを属性のように見せ、@property_name.setter は値がどのように代入されるかを制御できるようにします。

チートシート

@property デコレータを使用すると、メソッドに属性のようにアクセスできるようになり、値の取得や設定を簡潔に行うことができます。

プロパティの基本的な使い方:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

括弧なしでプロパティにアクセスします:

my_circle = Circle(5)
print(my_circle.radius)  # 5
print(my_circle.area)    # 78.53975

値の代入を制御するためにセッターを追加します:

@radius.setter
def radius(self, value):
    if value > 0:
        self._radius = value
    else:
        print("Radius must be positive!")

属性のように値を設定します:

my_circle.radius = 10  # セッターを使用します
print(my_circle.radius)  # ゲッターを使用します

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Object Oriented Programmingのすべてのレッスン