Python プロパティとデコレーターのサンプル

Pythonのプロパティとデコレーターのサンプルです。

確認環境
・Python 3.7.0

目次

プロパティ

class property(fget=None, fset=None, fdel=None, doc=None)
  • property 属性を返します。
  • fget は属性値を取得する関数を指定します。
  • fset は属性値を設定する関数を指定します。
  • fdel は属性値を削除する関数を指定します。
  • doc は属性の docstring を作成します。
  • 以下は、Pythonの公式ドキュメントのpropertyのリンクです。
    https://docs.python.org/ja/3.5/library/functions.html#property

プロパティのサンプル

プロパティのサンプルです。

# coding: utf-8

class Color:
	__name = None

	def getName(self):
		return self.__name

	def setName(self,a):
		self.__name = a

	def delName(self):
		print("abc")

	p1 = property(getName,setName,delName)

c1 = Color()

c1.p1 = "赤"

print(c1.p1) # 赤

del(c1.p1) # abc

15行目は、property関数です。
1つめの引数はゲッター(getter)です。値を取得するのに使用します。
2つめの引数はセッター(setter)です。値を設定するのに使用します。
3つめの引数はデリーター(deleter)です。値を削除するのに使用します。
19行目は、値をセットしています。
21行目は、値を取得して表示しています。
23行目は、delを使用しています。12,13行目が実行されます。

デコレーター

  • デコレーターは、@を使用してプロパティを定義します。

デコレーターのサンプルです。

# coding: utf-8

class Color:
	__name = None

	@property
	def test1(self):
		return self.__name

	@test1.setter
	def test1(self,a):
		self.__name = a

	@test1.deleter
	def test1(self):
		print("abc")

c1 = Color()

c1.test1 = "赤"

print(c1.test1) # 赤

del(c1.test1) # abc

6行目は、@propertyがあります。7行目のtest1がプロパティ名になり、かつゲッターの宣言になります。
10行目は、@test1.setterがあります。プロパティ名+setterです。セッターの宣言になります。
14行目は、@test1.deleterがあります。プロパティ名+deleterです。デリーターの宣言になります。
20行目は、値をセットしています。
22行目は、値を取得して表示しています。
24行目は、15,16行目のメソッドを実行しています。

関連の記事

Python クラスの仕組みと使い方のサンプル
Python クラスの継承のサンプル
Python オーバーライドのサンプル

△上に戻る