関数を持つクラスがあり__init__
ます。
オブジェクトが作成されたときに、この関数から整数値を返すにはどうすればよいですか?
__init__
コマンドライン解析を行うプログラムを作成しましたが、値を設定する必要があります。グローバル変数に設定して、他のメンバ関数で使用してもよろしいですか? もしそうなら、それを行う方法は?これまで、クラス外で変数を宣言しました。ある機能を設定しても他の機能に反映されない??
なぜそれをしたいのですか?
クラスが呼び出されたときに他のオブジェクトを返したい場合は、次の__new__()
メソッドを使用します。
class MyClass(object):
def __init__(self):
print "never called in this case"
def __new__(cls):
return 42
obj = MyClass()
print obj
__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
コンストラクターに対する特別な制約として、値が返されない場合があります。これを行うと、実行時に 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'
この__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
__init__
何も返さず、常に返す必要がありNone
ます。
追加したかっただけで、クラスを返すことができます__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
上記の方法は、テストで例外に対して特定のアクションを実装するのに役立ちます