我想通过添加一些一致性检查来增强我的模型的实现(这个值不能是负数,这个值不能为None,等等)
我想知道添加一些"类型检查"式的检查是否也是"Python"。例如,检查我放在车里的对象是否确实是SteeringWheel。
我确实想进行某种类型的检查,以便尽快发现错误。我想知道我是否在把方向盘放进车里的那一刻就加了一个合适的方向盘,而不是在车第一个转弯的时候(然后在车祸中调试,直到我发现错误的分配)。
我读到Python的鸭子类型哲学更倾向于检查添加的对象的属性或方法,而不是其类型。我理解这个原则,但这意味着模型必须知道如何使用对象,以便检查给定对象是否正确,这会在模型和控制器之间产生错误的依赖关系。
此外,应该测试哪些属性?wheel.rotate()
既适用于方向盘,也适用于轮胎。
另一种方法是让Model保持原样,并通过try-catch围绕每次使用Model对象,期望AttributeError
或TypeError
为,这将非常麻烦。
也许我想要这个是错误的,如果有人能说服我我有错误的想法,请这样做。但如果你认为我想要一个在不一致时会引发错误的模型是正确的,你能告诉我除了使用isinstance()
之外的其他方法吗?
谢谢。
您可能需要使用AbstractBaseClasses(https://docs.python.org/2/library/abc.html)在这里。pep 3119中的基本原理(http://legacy.python.org/dev/peps/pep-3119/#rationale)正是关于您的问题(确保对象支持给定的协议,而无需特别检查或严格的类型检查)。