如何从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中执行一个特殊的动作