我有一個RoundRobinChecker
和PlayoffChecker
類,它們都從ViolationChecker
繼承,它檢查給定的循環法或淘汰賽匹配是否通過規則。根據自變量來檢驗不同的子類
構造函數有一個參數,匹配項:ViolationChecker(match)
。現在,如果比賽是季後賽(match.playoff
),則應該實例化PlayoffChecker
,否則應該是RoundRobinChecker
。我可以這樣做:
checkers = [PlayoffChecker(match) if match.playoff else RoundRobinChecker(match) for match in matches]
但是,這是一種不乾淨的做法。是否可以調用父類的構造函數ViolationChecker(match)
,這會創建相應子類的實例?
我可以在這裏用什麼設計以透明的方式選擇適當的類?