Как возвратить значение от __ init __ в Python?

У меня есть класс с __init__ функция.

Как я могу возвратить целочисленное значение от этой функции, когда объект создается?

Я записал программу, где __init__ делает парсинг командной строки, и у меня должен быть некоторый набор значений. Это хорошо установлено это в глобальной переменной, и используйте его в других функциях членства? Раз так, как сделать это? До сих пор я объявил переменную вне класса. и устанавливая его одна функция не отражается в другой функции??

88
задан Mateusz Piotrowski 13 April 2016 в 21:10
поделиться

5 ответов

__ 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
103
ответ дан 24 November 2019 в 07:23
поделиться

Метод __ 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
13
ответ дан 24 November 2019 в 07:23
поделиться

Зачем вам это нужно?

Если вы хотите вернуть какой-то другой объект, когда вызывается класс, затем используйте метод __ new __ () :

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

obj = MyClass()
print obj
107
ответ дан 24 November 2019 в 07:23
поделиться

__ init __ ничего не возвращает и всегда должен возвращать None .

8
ответ дан 24 November 2019 в 07:23
поделиться

Из документации __ 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'
37
ответ дан 24 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: