【问题标题】:Verifying that an object instance complies with ABC in Python在 Python 中验证对象实例是否符合 ABC
【发布时间】: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


    【解决方案1】:
    import abc
    
    class Base(abc.ABC):
        @abc.abstractmethod
        def i_require_this(self):
            pass
    
    class Concrete(Base):
        def __init__(self):
            return
    
    concrete = Concrete()
    

    TypeError: Can't instantiate abstract class Concrete with abstract methods i_require_this

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 2014-06-27
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多