パッケージ管理
-
プロジェクト内で独立してパッケージを管理するために`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