How to return a value from __init__ in Python?

PythonClassInit

Python Problem Overview


I have a class with an __init__ function.

How can I return an integer value from this function when an object is created?

I wrote a program, where __init__ does command line parsing and I need to have some value set. Is it OK set it in global variable and use it in other member functions? If so how to do that? So far, I declared a variable outside class. and setting it one function doesn't reflect in other function ??

Python Solutions


Solution 1 - Python

Why would you want to do that?

If you want to return some other object when a class is called, then use the __new__() method:

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

obj = MyClass()
print obj

Solution 2 - Python

__init__ is required to return None. You cannot (or at least shouldn't) return something else.

Try making whatever you want to return an instance variable (or function).

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

Solution 3 - Python

From the documentation of __init__:

> As a special constraint on constructors, no value may be returned; doing so will cause a TypeError to be raised at runtime.

As a proof, this code:

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

f = Foo()

Gives this error:

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

Solution 4 - Python

Sample Usage of the matter in question can be like:

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)

Solution 5 - Python

The __init__ method, like other methods and functions returns None by default in the absence of a return statement, so you can write it like either of these:

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

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

But, of course, adding the return None doesn't buy you anything.

I'm not sure what you are after, but you might be interested in one of these:

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

f=Foo()
print f.value
print f

prints:

42
42

Solution 6 - Python

__init__ doesn't return anything and should always return None.

Solution 7 - Python

You can just set it to a class variable and read it from the main program:

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

Solution 8 - Python

We can not return value from init. But we can return value using new.

class Car:
    def __new__(cls, speed, unit):
        return (f"{speed} with unit {unit}")


car = Car(42, "km")
print(car)

Solution 9 - Python

init() return none value solved perfectly

class Solve:
def __init__(self,w,d):
    self.value=w
    self.unit=d
def __str__(self):
    return str("my speed is "+str(self.value)+" "+str(self.unit))
ob=Solve(21,'kmh')
print (ob)

output: my speed is 21 kmh

Solution 10 - Python

Just wanted to add, you can return classes in __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

The above method helps you implement a specific action upon an Exception in your test

Solution 11 - Python

solution here Yes, trying to return from the init method in python returns errors as it is a constructor of the class you can only assign values for the scope of the class but not return a specific value. if you want to return a value but do not wish to create a method, you can use str method

def __init__(self,a):
    self.value=a

   def __str__(self):
    return str("all my return values are possible here")`

Solution 12 - Python

Well, if you don't care about the object instance anymore ... you can just replace it!

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

print MuaHaHa('foo')=='foo'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionwebminal.orgView Question on Stackoverflow
Solution 1 - PythonJacek KoniecznyView Answer on Stackoverflow
Solution 2 - PythonCan Berk GüderView Answer on Stackoverflow
Solution 3 - PythonnoskloView Answer on Stackoverflow
Solution 4 - PythonPMNView Answer on Stackoverflow
Solution 5 - PythonquamranaView Answer on Stackoverflow
Solution 6 - PythongruszczyView Answer on Stackoverflow
Solution 7 - PythonPythonProView Answer on Stackoverflow
Solution 8 - PythonSuraj GargView Answer on Stackoverflow
Solution 9 - Pythonvikram singh gurjarView Answer on Stackoverflow
Solution 10 - Pythonuser4990011View Answer on Stackoverflow
Solution 11 - Pythonreema dassView Answer on Stackoverflow
Solution 12 - PythoncosmoView Answer on Stackoverflow