Python

Pythonでオブジェクト指向とはなんなのかを理解する #2

振り返りと今回の記事で作成するもの

この連載ではPythonを使ってコンソール上で動くTwitterみたいなアプリを作っていきます。前回の記事ではidとパスワードの入力を受け付けて、それと合致したアカウントがあれば「ログインに成功しました」と出力し、なければ「ログインに失敗しました」と出力するプログラムを作成しました。

今回の記事では新しくアカウントを作成できるようにしていきます。前回作ったフォルダの構成は以下のようになります。

├── main.py
├── twitter
│   ├── controller
│   │   ├── __pycache__
│   │   └── tweet.py
│   ├── models
│   │   ├── __pycache__
│   │   ├── account.py
│   │   └── loginAdmin.py
│   └── views

今回の記事ではtweet.pyとloginAdmin.pyに変更を加えていきます。

[temp id=2]

tweet.py

完成したコードはこうなります。

from twitter.models import loginAdmin

def loginMode():
	accountAdmin = loginAdmin.LoginAdmin();

	while(True):
		# 次に行うアクションの入力を待ち受ける
		print("何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→", end='')
		nyuryoku=input()
		
		if (nyuryoku=='q'):
			break;
		elif(nyuryoku=='l'):
			# idの入力を受け付ける
			print('idを入力してください→', end='')
			id = input()

			# passwordの入力を受け付ける
			print("passwordを入力してください→", end='')
			password=input()

			# loginAdminのloginメソッドを呼び出す
			loginAccount = accountAdmin.login(id, password);
			if(loginAccount):
				print('ログインに成功しました')
			else:
				print('ログインに失敗しました')
		elif(nyuryoku=='a'):
			print('新規アカウントを作成します。')
			# idの入力を受け付ける
			print('idを入力してください→', end='')
			id = input()

			# passwordの入力を受け付ける
			print("passwordを入力してください→", end='')
			password=input()

			# loginAdminのsignupメソッドを呼び出す
			accountAdmin.signup(id, password);

前回実装したのはログイン機能だけだったのでいきなりidとpasswordを聞いていましたが、今回は新規アカウントの作成も行えるように変更します。そのため初めはどちらの操作をするのかユーザーからの入力を待つようにします。具体的にはユーザーがlを入力したらログイン機能を、aを入力したらアカウントの新規作成を行えるようにします。コードでは以下の部分になります。

# 次に行うアクションの入力を待ち受ける
print("何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→", end='')
nyuryoku=input()

上の入力で受け付けた値によって処理を変えていきます。ログインは前回の記事と同じになっているので今回は説明は割愛します。aが入力されるとアカウントの新規作成が行われます。新規アカウントのidとpasswordをユーザーから受け付け、それらを引数としてaccountAdminのsignupメソッドを呼び出しています。

elif(nyuryoku=='a'):
	print('新規アカウントを作成します。')
	# idの入力を受け付ける
	print('idを入力してください→', end='')
	id = input()

	# passwordの入力を受け付ける
	print("passwordを入力してください→", end='')
	password=input()

	# loginAdminのsignupメソッドを呼び出す
	accountAdmin.signup(id, password);

次にここで呼び出したsignupメソッドを作っていきます。loginAdmin.pyを編集していきます。

 [temp id=2]

loginAdmin.py

最終的なコードは以下のようになります。追加したのはsignupメソッドです。

from twitter.models.account import Account

class LoginAdmin(object):

	def __init__(self):
		self.accountList=[]
		self.accountList.append(Account('Yuka', 'Ooyama'))
		self.accountList.append(Account('Taro', 'Tanaka'))
		self.accountList.append(Account('Makoto', 'Suzuki'))

	def login(self, id, password):
		# accountListのアカウントを一つずつチェックしてidとpasswordが一致しているものがあれば、そのアカウントを返す
		for account in self.accountList:
			if (account.id == id) and (account.password == password):
				return account

	def signup(self, id, password):
		# Accountのインスタンスを作成してaccountListに追加する
		self.accountList.append(Account(id, password))

signupメソッドではidとpasswordを引数として受け取り、新しいAccountのインスタンスを作成します。そしてそれをaccountListに追加しています。上のコードでは一行でこの処理を書いていますが、わかりやすくするために以下のように二行で記述してもいいかもしれません。

def signup(self, id, password):
    newAccount = Account(id, password)
    self.accountList.append(Account(id, password))

これによってsignupメソッドを使うことで新しくアカウントを作成し、リストに加えることができました。実際に実行して動きを確認してみます。

 [temp id=2]

動作確認

以下のように動作確認してみました。はじめにid→Yamada、password→Taroというアカウントでログインを試みますが、そのようなアカウントは存在しないのでログインに失敗します。その後、アカウント作成でid→Yamada、password→Taroというアカウントを作成します。再びid→Yamada、password→Taroでログインすると先ほどアカウントが作成されているのでログインに成功します。

$ python main.py
何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→l
idを入力してください→Yamada
passwordを入力してください→Taro
ログインに失敗しました
何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→a
新規アカウントを作成します。
idを入力してください→Yamada
passwordを入力してください→Taro
何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→l
idを入力してください→Yamada
passwordを入力してください→Taro
ログインに成功しました
何をしますか?(lでログイン/ aでアカウント新規作成/ qで終了)→q

 [temp id=2]

まとめ

今回の記事では前回作成したログイン機能に追加して新規アカウント作成機能を実装しました。

-Python