Python检查__init__参数

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++,另一个不回答我的问题.

检查构造函数参数

如何基于参数类型重载__init__方法?

geo*_*org 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
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)

  • 很少需要定义`__new__`,从它返回'None`是可怕的.只是抛出一个异常,而不是继续几行(或十几个函数调用,如果你运气不好),然后崩溃,出现一个莫名其妙的错误. (7认同)