Python: クラス まとめ

クラス定義の基本

クラスを定義する際の注意点は次の通りです。

  • クラス名の先頭は大文字を推奨
  • コンストラクタは__init__ (アンダーバー2つ)
  • メソッドの第一引数はself
  • データ属性はself.の後に変数名

self を使う所がポイントです。

class Person:

	# コンストラクタ
	def __init__(self, name):
		self.name = name
		
	def getName(self):
		return self.name

# インスタンス作成	
p = Person("田中")
print(p.getName())

# nameを変更
p.name = "山田"
print(p.getName())

クラスのモジュール化(別ファイル化)

ちょっとしたプログラムならクラス定義とインスタンス作成を同じ ファイルに記述しても特に問題はありません。

ですが開発規模が大きくなると、 クラス定義の部分を別ファイルにした方が開発しやすくなります。

ここではクラス定義をモジュール化(別ファイル化)し、 モジュールを読み込んで使用する方法を説明します。

使用するファイルは次の2つ

  • myperson.py(クラスを定義)
  • test.py(メインファイル。mypersonを読み込む)

まずはクラスを定義するファイル「myperson.py」

class Person:

	# コンストラクタ
	def __init__(self, name):
		self.name = name
		
	def getName(self):
		return self.name

補足:今回はPersonクラスだけを記述していますが、 このmyperson.pyに別のクラス定義や関数を記述することもできます。

次に「test.py」

import myperson

# インスタンス作成
p = myperson.Person("田中")

print(p.getName())

モジュールの読み込みは

import モジュール名

利用する場合は次のように記述します。

変数 = モジュール名.クラス名や関数名

インスタンス変数(データ属性)を表示

Pythonでクラスのインスタンス変数(データ属性)を一覧表示させたい場合は、 いくつか方法があります。 ここではvars()関数を使った方法と、__dict__ を使った方法を紹介します。

vars()関数で表示

次のPersonクラスには「name」と「age」の2つの属性が存在します。 vars()関数の引数としてインスタンスを指定すると表示できます。

# クラス定義
class Person:

	def __init__(self, name, age):
		self.name = name
		self.age = age
		
	def getName(self):
		return self.name

# インスタンス作成
p = Person("田中", 30)

# インスタンス変数(データ属性)を表示
print(vars(p)) 
実行結果
{'name': '田中', 'age': 30}
このようにdict型としてインスタンス変数がすべて表示されます。

インスタンス変数の数が多い場合は、 1つずつ表示させた方が見やすくなりますので、 「print(vars(p))」の部分を次のように変更します。

for t in vars(p).items():
	print(t)
実行結果
('name', '田中')
('age', 30)

items()メソッドを使うことでタプルとして1組ずつ表示できます。 どちらでもご自身が見やすい方を使ってください。

__dict__ で表示

__dict__ を使っても同じように表示できます。 その場合は「インスタンス.__dict__」と記述します。

# クラス定義
class Person:

	def __init__(self, name, age):
		self.name = name
		self.age = age
		
	def getName(self):
		return self.name

# インスタンス作成
p = Person("田中", 30)

# インスタンス変数(データ属性)を表示
print(p.__dict__)
実行結果
{'name': '田中', 'age': 30}

vars()関数の場合と同じように dict型として一覧表示されます。 1組ずつ表示する場合は最後の行を次のように変更します。

for t in p.__dict__.items():
	print(t)
実行結果
('name', '田中')
('age', 30)