概要
スキーマ定義時の視認性を向上させるため、オプション引数を持たない基本バリデータにおいて、インスタンス化のカッコ () を省略できるようにします。
変更内容
- VBuilder のメソッドを property 化
v.str などにアクセスした時点で StringValidator() などのインスタンスを返すようにします。
- Validator.call の実装
v.str() と呼び出された場合でもインスタンス自身を返すようにし、既存コードとの互換性を維持します。
実装コード案
# 1. 基底クラス Validator に __call__ を追加
class Validator:
def __init__(self) -> None:
# ... (既存の初期化)
pass
def __call__(self) -> "Validator":
"""
v.str() のようにカッコ付きで呼ばれても、自分自身を返すことで
カッコの有無を両方許容する(後方互換性の維持)。
"""
return self
# 2. VBuilder の基本メソッドを property に変更
class VBuilder:
@property
def str(self) -> StringValidator:
return StringValidator()
@property
def int(self) -> NumberValidator:
return NumberValidator(int)
@property
def float(self) -> NumberValidator:
return NumberValidator(float)
@property
def bool(self) -> BoolValidator:
return BoolValidator()
# 引数が必要なメソッドはそのまま維持
def list(self, item_validator: Union[Validator, Dict[builtins.str, Any], Type[Any]]) -> ListValidator:
return ListValidator(item_validator)
期待される効果
スキーマ定義の記述がより自然になります。
SCHEMA = {
"ユーザー名": v.str.min(3), # カッコなしで記述開始
"レベル": v.int, # オプションなしなら完全にプロパティ扱い
"フラグ": v.bool(), # 従来のカッコありも動作
"スキル": v.list(v.str) # 簡潔なネスト
}
概要
スキーマ定義時の視認性を向上させるため、オプション引数を持たない基本バリデータにおいて、インスタンス化のカッコ
()を省略できるようにします。変更内容
v.str などにアクセスした時点で StringValidator() などのインスタンスを返すようにします。
v.str() と呼び出された場合でもインスタンス自身を返すようにし、既存コードとの互換性を維持します。
実装コード案
期待される効果
スキーマ定義の記述がより自然になります。