验证子类中的Python参数
我试图验证一些python参数。在Python3.0中实现新的静态类型之前,最好的方法是什么 以下是我正在尝试的一个示例:验证子类中的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)
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
将检查子类传递给它的所有参数