Python.jpで Python 3.10の新機能(その1) パターンマッチ を紹介したけど、流行るだろうかね?便利っちゃ便利だから、Python3.9がEOLを迎えれば結構使われるんじゃないかと思う。
これはmatch-caseを使ってRustとかのResultっぽい使い方をしてみた例。
class Result:
_inspected = False
def __del__(self):
if not self._inspected:
print(f"{self} は確認されませんでした")
class Ok(Result):
__match_args__ = ("value", )
def __init__(self, value):
self._value = value
@property
def value(self):
self._inspected = True
return self._value
class Error(Result):
__match_args__ = ("reason", )
def __init__(self, reason):
self._reason = reason
@property
def reason(self):
self._inspected = True
return self._reason
def test(result):
match result:
case Ok(value):
print(value)
case Error(reason):
print(reason)
case _:
print("WTF!")
def to_int(s):
try:
return Ok(int(s))
except Exception as e:
return Error(str(e))
test(to_int("1234")) # -> 1234
test(to_int("abcdefg")) # -> invalid literal for int() with base 10: 'abcdefg'
Copyright © 2020 Atsuo Ishimoto
Powered by miyadaiku