11

del()ある条件下でいくつかのインスタンスに対してクラス呼び出しを行うことは可能ですか? または自分自身をNoneに変えますか?

    class T:
        def __init__(self, arg1, arg2):
            condition=check_condition(arg1,arg2)
            if not condition:
               do_something(arg1)
            else:
               del(self) #or self=None or return None

一種のインスタンスが存在しないことを確認するために、このようなことをする必要があります。

4

5 に答える 5

8

一種のインスタンスが存在しないことを確認するために、このようなことをする必要があります。

そのようなインスタンスの作成を単に防止したい場合は__init__()、条件が満たされるたびに例外を発生させます。

これは、コンストラクターの失敗を通知するための標準プロトコルです。詳細については、Python: is it bad form to raise exceptions within __init__? を参照してください。

于 2012-11-06T21:50:20.610 に答える
3

を調べ__new__ます。気になる状態を検出して返すことができるはずですNone。ただし、@lzkata がコメントで言及しているように、 an を上げるException方がおそらくより良いアプローチです。

于 2012-11-06T21:50:16.897 に答える
2

コメントで提案されているように、例外を発生させることができます。を実装できます__new__。また、次のようなファクトリークラスを作成することもできます

class TFactory:
    def createT(self, arg1, arg2):
        condition=check_condition(arg1,arg2)
        if not condition:
           return do_something(arg1)
        else:
           return None     
于 2012-11-06T21:51:22.503 に答える
2

はい、del self を呼び出すことができます。これは問題なく動作しますが、 initメソッドで「self」という名前のインスタンスへの参照を削除しているだけであることを知っておく必要があります。

Python では、オブジェクトへの参照がどこかにある限り、オブジェクトは存在します。

特定の条件下でオブジェクトが存在しないようにする場合は、オブジェクトを作成しているinitの外部で、それらの条件下でインスタンスを作成しようとしないでください。

また、このクラスで便利な関数を定義して、それらの条件が満たされているかどうかを返すことができます。

于 2012-11-06T21:57:34.823 に答える
1

クラスコンストラクターは、そのクラスのインスタンスを実際に構築することを目的としており、インスタンスを構築せずに None を返すだけで、半分黙って失敗することはありません。誰もその行動を期待していません。

むしろ、ファクトリ関数を使用してください。

class Test(object):
    @classmethod
    def create(cls):
        if ok(): return cls()
        else: return None
于 2012-11-06T22:01:14.557 に答える