1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの@propertyについて理解しよう

Posted at

Pythonの@propertyについて理解しよう

Pythonのクラスで@propertyデコレータを使うと、メソッドを属性のように使えるようになります。この記事では、プロパティの仕組みとその活用について説明します。

プロパティとは?

  • プロパティとはメソッドをあたかも属性のように扱える仕組みのことです

プロパティの基本的な機能

  • 計算や処理を実行して結果を返す:単に値を返すだけでなく、内部で計算や処理を行い、その結果を返すことができます
  • ゲッターとセッターで値を制御する:値の設定時に検証や制限を追加し、クラス内の状態を管理することができます
    • ここでいうゲッターとは@propertyをつけたメソッドを指します
    • セッターとは@propertyをつけたメソッド名にセットするメソッドをいいます
  • セッターやプロパティでアクセスする変数名には通常_(アンダースコア)を一つつける慣習があります
    • これは外部から直接アクセスしてほしくないことを示すためです

以下に具体的な例を挙げてみます

class Rectangle:
    def __init__(self, width, height):
        self._width = width
        self.height = height
    
    @property # ゲッター
    def width(self):
        return self._width
    
    @width.setter # セッター
    def width(self, val):
        if val <= 0:
            raise ValueError("Width must be positive")
        self._width = val
    
    @property # ゲッター
    def area(self):
        return self._width * self.height

このようなRectangleクラスを定義したときにゲッターは以下のようにして使うことができます。

使用例

rect = Rectangle(3,4)
print(rect.width) # 3
print(rect.area) # 12

rect.width = 6 #セッター
print(rect.area) # 24

このように、@property@<property_name>.setter を組み合わせることで、値の設定時に制御を追加できます。

読み取り専用のプロパティ

@propertyデコレータのみを使って、セッターを定義しなければ、プロパティは読み取り専用になります。以下の例ではwidthは読み取り専用として機能し、外部からは値を変更できません。

以下に具体的な例を挙げてみます

class Rectangle2:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property # ゲッター
    def width(self):
        return self.width
    
    @property # ゲッター
    def area(self):
        return self.width * self.height

rec2 = Rectangle2(3,4)

rec2.width = 6 # この行はエラーになります :AttributeError: can't set attribute

プロパティのメリット

プロパティを使うことによって、次のようなメリットがあります。

  • 柔軟なアクセス:計算結果や処理を外部から属性として取得することができる
  • 値の検証:設定される値に制限や検証を加えることができる
  • カプセル化の実現:内部の実装を隠しつつ、外部からはシンプルにアクセスできる

まとめ

プロパティを使うと、クラスの外部からメソッドを属性のように扱え、柔軟に値を取得・設定することができます。Pythonのプロパティを活用して、シンプルな制御を実現してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?