Pergunta

Eu tenho uma aula com um __init__ função.

Como posso retornar um valor inteiro dessa função quando um objeto é criado?

Eu escrevi um programa, onde __init__ A análise da linha de comando e eu preciso ter algum conjunto de valor. Tudo bem, defina -o na variável global e use -o em outras funções de membro? Se sim, como fazer isso? Até agora, declarei uma variável fora da classe. e defini -lo uma função não reflete em outra função ??

Foi útil?

Solução

__init__ é necessário para retornar nenhum. Você não pode (ou pelo menos não deveria) devolver outra coisa.

Tente fazer o que quiser retornar uma variável de instância (ou função).

>>> 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

Outras dicas

Por que você gostaria de fazer isso?

Se você quiser devolver algum outro objeto quando uma classe é chamada, use o __new__() método:

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

obj = MyClass()
print obj

De Documentação de __init__:

Como uma restrição especial aos construtores, nenhum valor pode ser retornado; Fazer isso fará com que um TypeError seja criado em tempo de execução.

Como prova, este código:

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

f = Foo()

Dá este erro:

Traceback (most recent call last):
  File "test_init.py", line 5, in <module>
    f = Foo()
TypeError: __init__() should return None, not 'int'

A amostra de uso do assunto em questão pode ser como:

class SampleObject(object)

    def __new__(cls,Item)
        if cls.IsValid(Item):
            return super(SampleObject, cls).__new__(cls)
        else:
            return None

    def __init__(self,Item)
        self.InitData(Item) #large amount of data and very complex calculations

...

ValidObjects=[]
for i in data:
    Item=SampleObject(i)
    if Item:             # in case the i data is valid for the sample object
        ValidObjects.Append(Item)

Eu não tenho reputação suficiente para não escrever um comentário, é loucura! Eu gostaria de poder postar como um comentário para Weronika

o __init__ O método, como outros métodos e funções, retorna nenhum por padrão na ausência de uma declaração de devolução, para que você possa escrevê -lo como qualquer um deles:

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

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

Mas, claro, adicionando o return None Não compra nada para você.

Não tenho certeza do que você procura, mas você pode estar interessado em um desses:

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

f=Foo()
print f.value
print f

impressões:

42
42

__init__ não retorna nada e sempre deve retornar None.

Só queria acrescentar, você pode devolver as aulas em __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

O método acima ajuda a implementar uma ação específica após uma exceção em seu teste

Você pode simplesmente defini -lo como uma variável de classe e lê -la no programa principal:

class Foo:
    def __init__(self):
        #Do your stuff here
        self.returncode = 42
bar = Foo()
baz = bar.returncode

Bem, se você não se importa mais com a instância do objeto ... você pode apenas substituí -lo!

class MuaHaHa():
def __init__(self, ret):
    self=ret

print MuaHaHa('foo')=='foo'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top