我有一个__init__
函数的类。
创建对象时,如何从此函数返回整数值?
我编写了一个程序,其中__init__
执行命令行解析,我需要设置一些值。可以在全局变量中设置它并在其他成员函数中使用它吗?如果是这样怎么办?到目前为止,我在课外宣布了一个变量。并将其设置为一个函数并不反映在其他函数中?
答案 0 :(得分:100)
你为什么要这样做?
如果要在调用类时返回其他对象,请使用__new__()
方法:
class MyClass(object):
def __init__(self):
print "never called in this case"
def __new__(cls):
return 42
obj = MyClass()
print obj
答案 1 :(得分:94)
__init__
需要返回None。你不能(或至少不应该)返回别的东西。
尝试制作任何想要返回实例变量(或函数)的内容。
>>> 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
答案 2 :(得分:37)
作为构造函数的特殊约束,不能返回任何值;这样做会导致在运行时引发TypeError。
作为证据,这段代码:
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'
答案 3 :(得分:13)
__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
答案 4 :(得分:13)
有问题的样本用法可以是:
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)
我没有足够的声誉所以我不能发表评论,这太疯狂了!我希望我可以将其作为对weronika
的评论发布答案 5 :(得分:8)
__init__
不返回任何内容,应始终返回None
。
答案 6 :(得分:3)
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)
输出: 我的速度是21公里/小时
答案 7 :(得分:2)
只想添加,您可以在__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
上述方法可帮助您在测试中的异常时实施特定操作
答案 8 :(得分:1)
我们不能从 init 返回值。但是我们可以使用 new 返回值。
class Car:
def __new__(cls, speed, unit):
return (f"{speed} with unit {unit}")
car = Car(42, "km")
print(car)
答案 9 :(得分:0)
您可以将其设置为类变量并从主程序中读取它:
class Foo:
def __init__(self):
#Do your stuff here
self.returncode = 42
bar = Foo()
baz = bar.returncode
答案 10 :(得分:0)
解决方案在这里 是的, 尝试从 python 中的 init 方法返回会返回错误,因为它是类的构造函数,您只能为类的范围分配值,但不能返回特定值。 如果你想返回一个值但不想创建一个方法,你可以使用 str 方法
def __init__(self,a):
self.value=a
def __str__(self):
return str("all my return values are possible here")`
答案 11 :(得分:-1)
好吧,如果您不再关心对象实例,则可以替换它!
class MuaHaHa():
def __init__(self, ret):
self=ret
print MuaHaHa('foo')=='foo'