我有一个RoundRobinChecker
和一个PlayoffChecker
类,它们都继承自ViolationChecker
,用于检查给定的循环赛或季后赛比赛是否通过规则
构造函数有一个参数,匹配:ViolationChecker(match)
。现在,如果比赛是季后赛比赛(match.playoff
),那么应该实例化一个PlayoffChecker
,否则它应该是一个RoundRobinChecker
。我可以这样做:
checkers = [PlayoffChecker(match) if match.playoff else RoundRobinChecker(match) for match in matches]
但这是一种不干净的做法。是否可以只调用父类构造函数ViolationChecker(match)
,这将创建相应子类的实例
我可以在这里使用什么设计以透明的方式选择合适的类
为了使} method :
ViolationChecker(match)
工作,您可以像这样重写父类中的^{但是,对于阅读您的代码的人来说,
ViolationChecker(match)
返回子类的实例并不明显。我建议在ViolationChecker
中添加一个具有清晰名称的staticmethod,如下所示:现在您可以执行
ViolationChecker.new_for_match(match)
,这更清楚地表达了专门为这个match
实例创建ViolationChecker
的意图相关问题 更多 >
编程相关推荐