У меня есть класс с __init__
функция.
Как я могу возвратить целочисленное значение от этой функции, когда объект создается?
Я записал программу, где __init__
делает парсинг командной строки, и у меня должен быть некоторый набор значений. Это хорошо установлено это в глобальной переменной, и используйте его в других функциях членства? Раз так, как сделать это? До сих пор я объявил переменную вне класса. и устанавливая его одна функция не отражается в другой функции??
__ 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
Метод __ init __
, как и другие методы и функции, по умолчанию возвращает None при отсутствии оператора return, поэтому вы можете его написать вроде любого из этих:
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
Зачем вам это нужно?
Если вы хотите вернуть какой-то другой объект, когда вызывается класс, затем используйте метод __ new __ ()
:
class MyClass(object):
def __init__(self):
print "never called in this case"
def __new__(cls):
return 42
obj = MyClass()
print obj
__ init __
ничего не возвращает и всегда должен возвращать None
.
Из документации __ 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'