che*_*fin 5 python parameters class 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
Run Code Online (Sandbox Code Playgroud)
谢谢.
这些是我发现的最接近的问题,但一个是C++,另一个不回答我的问题.
你必须为此定义__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
Run Code Online (Sandbox Code Playgroud)
也就是说,__init__
在无效args上使用和引发异常通常要好得多:
class Foo(object):
def __init__(self, arg):
if arg > 10: #error!
raise ValueError("invalid argument!")
# do stuff
Run Code Online (Sandbox Code Playgroud)