【发布时间】:2020-03-31 00:05:26
【问题描述】:
我有一个 API,它接收我希望符合特定接口(在开发时已知)的对象的序列化表示。我收到的序列化数据包括用于创建此接口的方法/属性的实现的详细信息,因此实际对象是在运行时构造的;但是,方法名称、签名、属性类型等应与开发时从接口中已知的名称匹配。我希望能够在运行时构造此对象,然后验证接口合规性,最好在构造无效对象后立即失败,而不仅仅是在我尝试调用不存在的方法时。
我是 Python 新手,所以我不确定是否有一种惯用的方式来进行这种检查。我研究过使用抽象基类,并用这样的类注释我构造的对象。在开发期间使用注释很方便,因为我可以在 VSCode 中获得智能感知,但它们不用于验证我构造的对象在运行时是否正确实现了 ABC - 例如,当它作为参数传递给方法时,如下所示:
def my_method(self, generated_object: MyABC):
是否有另一种方法来执行我所描述的操作(强制转换/强制转换为 ABC,或者可能使用不同的语言功能)?或者我最好的办法是实现我自己的验证器,它将构造对象上的方法/属性与 ABC 上的方法/属性进行比较?
【问题讨论】:
标签: python python-3.x typechecking abc