¿Cómo devolver un valor de __init__ en Python?

Tengo una clase con una función __init__ .

¿Cómo puedo devolver un valor entero de esta función cuando se crea un objeto?

Escribí un progtwig, donde __init__ realiza el análisis de la línea de comandos y necesito tener un valor establecido. ¿Está bien configurarlo en una variable global y usarlo en otras funciones miembro? Si es así, ¿cómo hacer eso? Hasta ahora, he declarado una variable fuera de clase. y configurarlo una función no se refleja en otra función?

Se requiere __init__ para devolver Ninguno. No puedes (o al menos no debes) devolver otra cosa.

Intente hacer lo que quiera para devolver una variable de instancia (o función).

 >>> class Foo: ... def __init__(self): ... return 42 ... >>> foo = Foo() Traceback (most recent call last): File "", line 1, in  TypeError: __init__() should return None 

¿Por qué querrías hacer eso?

Si desea devolver algún otro objeto cuando se llama a una clase, use el __new__() :

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

De la documentación de __init__ :

Como una restricción especial en los constructores, no se puede devolver ningún valor; Al hacerlo, se generará un TypeError en tiempo de ejecución.

Como prueba, este código:

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

Da este error:

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

El uso de muestra del asunto en cuestión puede 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) 

No tengo suficiente reputación, así que no puedo escribir un comentario, ¡es una locura! Me gustaría poder publicarlo como un comentario para weronika

El método __init__ , al igual que otros métodos y funciones, devuelve Ninguno de forma predeterminada en ausencia de una statement de retorno, por lo que puede escribirlo como cualquiera de estos:

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

Pero, por supuesto, agregando el return None te compra nada.

No estoy seguro de lo que está buscando, pero podría estar interesado en uno de estos:

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

huellas dactilares:

 42 42 

__init__ no devuelve nada y siempre debe devolver None .

Solo quería agregar, puedes devolver clases en __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 

El método anterior lo ayuda a implementar una acción específica sobre una excepción en su prueba

Simplemente puede establecerlo en una variable de clase y leerlo desde el progtwig principal:

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

Bueno, si ya no te importa la instancia del objeto … ¡simplemente puedes reemplazarlo!

 class MuaHaHa(): def __init__(self, ret): self=ret print MuaHaHa('foo')=='foo'