133

関数を持つクラスがあり__init__ます。

オブジェクトが作成されたときに、この関数から整数値を返すにはどうすればよいですか?

__init__コマンドライン解析を行うプログラムを作成しましたが、値を設定する必要があります。グローバル変数に設定して、他のメンバ関数で使用してもよろしいですか? もしそうなら、それを行う方法は?これまで、クラス外で変数を宣言しました。ある機能を設定しても他の機能に反映されない??

4

12 に答える 12

153

なぜそれをしたいのですか?

クラスが呼び出されたときに他のオブジェクトを返したい場合は、次の__new__()メソッドを使用します。

class MyClass(object):
    def __init__(self):
        print "never called in this case"
    def __new__(cls):
        return 42

obj = MyClass()
print obj
于 2010-03-22T11:46:09.357 に答える
145

__init__None を返す必要があります。他のものを返すことはできません (または、少なくとも返すべきではありません)。

インスタンス変数 (または関数) を返したいものを作成してみてください。

>>> class Foo:
...     def __init__(self):
...         return 42
... 
>>> foo = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() should return None
于 2010-03-22T11:37:52.397 に答える
41

ドキュメントから__init__:

コンストラクターに対する特別な制約として、値が返されない場合があります。これを行うと、実行時に TypeError が発生します。

証拠として、このコード:

class Foo(object):
    def __init__(self):
        return 2

f = Foo()

このエラーが発生します:

Traceback (most recent call last):
  File "test_init.py", line 5, in <module>
    f = Foo()
TypeError: __init__() should return None, not 'int'
于 2010-03-22T11:41:16.997 に答える
16

この__init__メソッドは、他のメソッドや関数と同様に、return ステートメントがない場合はデフォルトで None を返すため、次のいずれかのように記述できます。

class Foo:
    def __init__(self):
        self.value=42

class Bar:
    def __init__(self):
        self.value=42
        return None

しかし、もちろん、追加しreturn Noneても何も得られません。

あなたが何を求めているのかはわかりませんが、次のいずれかに興味があるかもしれません:

class Foo:
    def __init__(self):
        self.value=42
    def __str__(self):
        return str(self.value)

f=Foo()
print f.value
print f

プリント:

42
42
于 2010-03-22T11:52:08.133 に答える
9

__init__何も返さず、常に返す必要がありNoneます。

于 2010-03-22T11:39:51.040 に答える
0

追加したかっただけで、クラスを返すことができます__init__

@property
def failureException(self):
    class MyCustomException(AssertionError):
        def __init__(self_, *args, **kwargs):
            *** Your code here ***
            return super().__init__(*args, **kwargs)

    MyCustomException.__name__ = AssertionError.__name__
    return MyCustomException

上記の方法は、テストで例外に対して特定のアクションを実装するのに役立ちます

于 2016-06-02T08:52:42.620 に答える