过去几个小时我一直在努力解决这个问题,而且我即将放弃。
如何确保在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 ++,另一个不回答我的问题。
答案 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)