如何从Python中的__init__返回值?

我有一个__init__函数的类。

如何创build一个对象时从这个函数返回一个整数值?

我写了一个程序,其中__init__命令行parsing,我需要有一些值设置。 它可以将其设置为全局variables并在其他成员函数中使用它? 如果是这样怎么办? 到目前为止,我在课堂外宣布了一个variables。 并设置它一个function不反映在其他function?

__init__返回新创build的对象。 你不能(或者至less不应该)返回别的东西。

尝试做任何你想要返回一个实例variables(或函数)。

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

你为什么想这么做?

如果要在调用类时返回其他对象,请使用__new__()方法:

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

__init__的文档 :

作为构造函数的特殊约束,不可能返回任何值; 这样做会在运行时引发TypeError。

作为一个certificate,这个代码:

 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' 

有关事宜的样本用法可以是:

 class SampleObject(object) def __new__(cls,Item) if self.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) 

我没有足够的声誉,所以我不能写评论,这是疯了! 我希望我可以张贴它作为评论weronika

像其他方法和函数一样, __init__方法在没有return语句的情况下默认返回None,所以你可以像下面这样写它:

 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 

__init__不返回任何东西,应该总是返回None

只是想添加,你可以在__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 

上述方法可以帮助你在你的testing中执行一个特殊的动作