Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证对象实例是否符合Python中的ABC_Python_Python 3.x_Typechecking_Abc - Fatal编程技术网

验证对象实例是否符合Python中的ABC

验证对象实例是否符合Python中的ABC,python,python-3.x,typechecking,abc,Python,Python 3.x,Typechecking,Abc,我有一个API,它接收我期望符合特定接口(在开发时已知)的对象的序列化表示。我收到的序列化数据包括用于创建此接口的方法/属性的实现的详细信息,因此实际对象在运行时构造;但是,方法名、签名、属性类型等都应该与开发时从接口中已知的匹配。我希望能够在运行时构造这个对象,然后验证接口的一致性,最好在构造了无效对象后立即失败,而不仅仅是在我试图调用不存在的方法时 我是Python新手,所以我不确定是否有一种惯用的方法来进行这样的检查。我已经研究过使用抽象基类,并用这样的类注释我构造的对象。在开发期间使用注

我有一个API,它接收我期望符合特定接口(在开发时已知)的对象的序列化表示。我收到的序列化数据包括用于创建此接口的方法/属性的实现的详细信息,因此实际对象在运行时构造;但是,方法名、签名、属性类型等都应该与开发时从接口中已知的匹配。我希望能够在运行时构造这个对象,然后验证接口的一致性,最好在构造了无效对象后立即失败,而不仅仅是在我试图调用不存在的方法时

我是Python新手,所以我不确定是否有一种惯用的方法来进行这样的检查。我已经研究过使用抽象基类,并用这样的类注释我构造的对象。在开发期间使用注释很方便,因为我可以在VSCode中获得intellisense,但它们不用于验证我构造的对象在运行时是否正确实现了ABC-例如,当它作为参数传递到方法中时,如下所示:

def my_method(self, generated_object: MyABC):
有没有其他方法来实现我所描述的(强制转换到ABC,或者使用不同的语言功能)?或者,我最好实现自己的验证器,将构造对象上的方法/属性与ABC上的方法/属性进行比较

import abc

class Base(abc.ABC):
    @abc.abstractmethod
    def i_require_this(self):
        pass

class Concrete(Base):
    def __init__(self):
        return

concrete = Concrete()
TypeError:无法使用我需要的抽象方法实例化抽象类混凝土