5

私はここ数時間これを理解しようとしてきましたが、あきらめようとしています.

Python で、一致する特定の基準のみがオブジェクトを作成するようにするにはどうすればよいですか?

たとえば、オブジェクト Hand を作成し、イニシャライザに十分な数の指がある場合にのみ Hand を初期化するとします。(これはあくまで例えで考えてください)

言う、

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

ありがとう。

これらは私が見つけた最も近い質問ですが、1 つは C++ にあり、もう 1 つは私の質問に答えていません。

コンストラクタ パラメータのチェック

引数の型に基づいて __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 に答える