5

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

您如何确保在 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++,另一个没有回答我的问题。

检查构造函数参数

如何根据参数类型重载 __init__ 方法?

4

2 回答 2

5

您必须为此定义__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__在无效参数上使用和引发异常通常要好得多:

class Foo(object):
    def __init__(self, arg):
        if arg > 10: #error!
            raise ValueError("invalid argument!") 
        # do stuff
于 2012-06-02T23:38:11.947 回答
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)
于 2012-06-02T23:37:39.653 回答