パッケージ管理

  • プロジェクト内で独立してパッケージを管理するために`virtualenv`を使う

  • requirements.txtファイルにインストールするパッケージを記載しておく

# venvを初期化
$ mkdir .venv
$ python3 -mvenv .venv

# アクティベート
$ source .venv/bin/activate

# .venv内にパッケージをインストール
(.venv) $ pip install -r requirements.txt

# 無効化
$ deactivate

フォルダ構成

# パッケージの構成
project
	__init__.py ---- モジュール内のパッケージをimportしているindexファイル
	module01.py
	module02.py

文法・特殊属性

# 処理を改行して記述する
num = 10 + \
	20 + \
	30


DictTest():
	def __init__(self):
		self.a = 1
		self.b = 2

	def func(i:int) -> int:
		'''
			コメント
		'''
		return 1+10


# そのオブジェクトのアトリビュートを辞書で返す
dicttest = DictTest()
print(dicttest.__dict__) # {'a':1, 'b':2}

# 関数の真下にある複数行コメントを読み込んで格納する
print(dicttest.func.__doc__) # コメント

# 関数注釈をすると辞書で内容を返す
print(dicttest.func.__annotations__)  # {'i': 'int, 'return': 'int'}

# 関数が定義されているモジュールの名前を返す
print(dicttest.__module__)  # __main__

関数注釈

def main(i:int) -> int:
	return i+10

ファイルの実行

  • ファイル名として実行されているかを判定する`if __name`がある

  • これがないとimportの際にも実行されてしまう。

# hello.py
def main():
	print("Hello")

if __name__ == "__main__":
	main()
> python hello.py

デコレータ

def deco_html(func):
    def wrapper(*args, **kwargs):
        res = '<html>'
        res = res + func(*args, **kwargs)
        res = res + '</html>'
        return res
    return wrapper

def deco_body(func):
    def wrapper(*args, **kwargs):
        res = '<body>'
        res = res + func(*args, **kwargs)
        res = res + '</body>'
        return res
    return wrapper

@deco_html
@deco_body
def test():
    return 'Hello Decorator'

print(test())

例外処理

try:
	print(a/b)
except Except as e:
	pass # 例外処理をスキップする
	print('catch error:', e)
else:
	print('no error.')
finally:
	print('all done.')

Class

  • selfがthisに該当する。そのクラスのインスタンスを表すオブジェクトで、メンバー関数の第一引数に受け取る

  • private, protectedに相当する修飾子はない。privateが__xx、protectedが_x、と表現する慣習。

class A_papa:
	parent_val = '継承できる'

class A_mama:
	parent_val = '多重継承できる'

class A(A_papa, A_mama):
	class_val = 'クラス変数(public static変数と同義)'

	# コンストラクタ
	def __init__(self):
    self.instace_val = 'インスタンス変数(public変数と同義)'

	def __iter__(self):
	def __next__(self):
	def __call__(self):

	# メソッド、メンバー関数
	def method(self):
		return self.

	# 静的メソッド(2つある)
	@staticmethod
	def static_method():
		return "hello"

	@classmethod
	def class_method(cls):
		return cls.class_val

	# ゲッター
	@property
	def name(self):
    return self.instace_val

	# セッター
	@name.setter
	def name(self, val):
    self.instace_val = val

	# デリター
	@name.deleter
	def name(self):
		print('name deleted')


A.method(); #hello