Python 3.0 かわいいよ
あああああ Python 3.0 かわいいよほんとかわいいよ
かわいすぎて隅々までチュッチュしたいお
__annotations__ プロパティ
Python 3.0 一番の目玉。個人的に。
関数リテラルが大きく拡張された。
def plus(lhs: int, rhs: int) -> int: """ただの足し算。""" return lhs + rhs plus.__annotations__ # {'lhs': <class 'int'>, 'rhs': <class 'int'>, 'return': <class 'int'>}
仮引数リストに : expression が、仮引数リストの後に -> expression が書けるようになった。
書くか書かないかは全くの任意で、どっちにしても関数の動作には直接影響しない。
また、 expression すなわち式が書けるということなので
def foo(arg1: "こんなのも", arg2: "大丈夫" in "こんなのも大丈夫です" = "これデフォルト値ね", arg3: (list, "こんなのも") = None, *args: ["任意引数リストも大丈夫さ!"], **kwargs: ({x for x in 'abracadabra' if x not in 'abc'}, "うはあ")) -> None: pass foo.__annotations__ # {'args': ['任意引数リストも大丈夫さ!'], # 'return': None, # 'arg1': 'こんなのも', # 'arg2': True, # 'arg3': (<class 'list'>, 'こんなのも'), # 'kwargs': ({'r', 'd'}, 'うはあ')}
これは気持ち悪い。 (良い意味で)
まあ、こういうリテラルがあればさ。
multimethod みたいな実装も楽になるよね。
class RaiseWrapper: pass def raises(cls: type = None) -> RaiseWrapper: """例外検査ラッパ。 適当に。 """ return RaiseWrapper(cls) class List: """意味のない配列クラス。""" @raises(NotImplementedError) def get_merged(self: List, mergee: List) -> List: """リストをマージした結果を持つ新しいインスタンスを返す。 まだ実装されていません。 """ raise NotImplementedError() # Traceback (most recent call last): # File "/path/to/file", line %, in <module> # class List: # File "/path/to/file", line %, in List # def mergeAndClone(self: List, merge_with: List) -> List: # NameError: name 'List' is not defined
んー、分かりきってたことだけど、惜しい。
次は ABC について書こうと思う。