Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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参数_Python_Inheritance_Decorator_Static Typing - Fatal编程技术网

验证子类中的Python参数

验证子类中的Python参数,python,inheritance,decorator,static-typing,Python,Inheritance,Decorator,Static Typing,我试图验证一些python参数。在Python3.0中实现新的静态类型之前,最好的方法是什么 以下是我正在尝试的一个示例: class A(object): @accepts(int, int, int) def __init__(a, b, c): pass class B(A): @accepts(int, int, int, int) def __init__(a, b, c, d): A.__init__(a, b, c)

我试图验证一些python参数。在Python3.0中实现新的静态类型之前,最好的方法是什么

以下是我正在尝试的一个示例:

class A(object):
    @accepts(int, int, int)
    def __init__(a, b, c):
        pass

class B(A):
    @accepts(int, int, int, int)
    def __init__(a, b, c, d):
        A.__init__(a, b, c)
正如您所看到的,decorator很好地执行了类输入的类型检查,但是我必须定义第二个类的所有参数,当我有多个继承级别时,这会变得非常糟糕。我可以成功地使用kwargs,但它没有上面的类型检查方法那么好

本质上,我想从kwargs列表中弹出一个参数并检查它的类型,然后将其余的传递给它的父参数,但在扩展时,要以非常灵活和干净的方式进行


有什么建议吗?

您可能需要使用
检查
模块。它可以让你列举超类、参数列表和其他有趣的东西。您可能希望检查超类
\uuuu init\uuuu
方法的参数列表,并将其与子类中的参数进行比较。我不确定这是否对你有用


不过我会小心你的假设。假设仅仅因为类A有N个
\uuuu init\uuu
参数,子类将至少包含N个参数并将前N个参数传递给超类,这可能是不安全的。如果子类更具体,那么它可能会将其超类
\uuuuu init\uuuu
方法的所有2个参数都填充进去。

为什么不定义一个
any
值,并用
@accepts(any,any,any,int)
修饰子类构造函数呢?您的装饰程序不会检查标有
any
的参数,超类构造函数上的
@accepts
将检查子类传递给它的所有参数