我想验证几个蟒蛇参数。直到我们在Python 3.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)

正如你可以看到装饰是很好执行的输入类型检查我的课,但我有所有的参数定义为第二类,当我有继承的多层次,其变得非常讨厌。我可以使用kwargs取得了一些成功,但它并不完全像你一样进行类型检查上面的方法。

基本上我想弹出一个参数关闭kwargs列表,并检查它的类型,然后通过剩余到它的父,但在一个非常灵活和清洁的方式做到这一点,因为这秤。

任何建议?

有帮助吗?

解决方案

为什么不只是限定any值,和与装饰@accepts(any, any, any, int)子类构造函数?你的装饰不会检查标有any参数,并在父类的构造的@accepts将子查询向上传递给它的所有参数。

其他提示

您可能要玩的inspect模块。它可以让你列举超,参数列表,以及其他有趣的东西。看来你可能要检查超__init__方法的参数列表并将其与你的子类的东西。我不知道这是否会为你工作或没有。

我会小心你做出假设,但。它可能不是安全的假设,仅仅是因为A类已的名词的参数__init__,亚将至少包含的名词的参数,并通过第一的名词通过对超类。如果子类是更具体的,那么它可能在所有的参数到它的超类方法__init__ 2继续进行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top