Python检查__init__参数

时间:2012-06-02 23:33:01

标签: python class parameters init

过去几个小时我一直在努力解决这个问题,而且我即将放弃。

如何确保在python中只有匹配的特定条件才能创建对象?

例如,假设我想创建一个Hand对象,并且只有在初始化程序中有足够的Fingers时才初始化Hand? (请将此作为类比)

说,

class Hand:
  def __init__(self, fingers):
    # make sure len(fingers)==5, and 
    #only thumb, index, middle, ring, pinky are allowed in fingers
    pass

感谢。

这是我发现的最接近的问题,但一个是C ++,另一个不回答我的问题。

checking of constructor parameter

How to overload __init__ method based on argument type?

2 个答案:

答案 0 :(得分:6)

您必须为此定义__new__

class Foo(object):
    def __new__(cls, arg):
        if arg > 10: #error!
            return None 
        return super(Foo, cls).__new__(cls)

print Foo(1)    # <__main__.Foo object at 0x10c903410>
print Foo(100)  # None

也就是说,使用__init__并在无效args上引发异常通常要好得多:

class Foo(object):
    def __init__(self, arg):
        if arg > 10: #error!
            raise ValueError("invalid argument!") 
        # do stuff

答案 1 :(得分:0)

尝试断言:

class Hand(object):
    def __init__(self,fingers):
        assert len(fingers) == 5
        for fing in ("thumb","index","middle","ring","pinky"):
            assert fingers.has_key(fing)