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

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

確認環境
・Python 3

目次

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

プロパティ

class property(fget=None, fset=None, fdel=None, doc=None)
  • property 属性を返します。
  • fget は属性値を取得する関数を指定します。ゲッター(getter)です。
  • fset は属性値を設定する関数を指定します。セッター(setter)です。
  • fdel は属性値を削除する関数を指定します。デリーター(deleter)です。
  • 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行目は、値をセットしています。15行目のセッターが使用されます。
21行目は、値を取得して表示しています。15行目のゲッターが使用されます。
23行目は、delを使用しています。15行目のデリーターが使用されます。

デコレーター

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

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

# 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 オーバーライドのサンプル

△上に戻る