2011-10-24 65 views
4

我需要在构造函数中返回一个Bike实例。例如:从构造函数返回一个类的实例

class Bike(object): 
    def __init__(self,color): 
     self.bikeColor = color 
     return self #It should return an instance of the class; is this not right? 

myBike = Bike("blue") 

当我做以上,我得到以下错误:

TypeError: __init__() should return None, not 'Bike' 

如果是这样的话,我怎么会返回一个实例,如果它只是猜想return None

+1

不,它应该返回Non e如错误所示 – JBernardo

+1

这是一个初始值设定项。如果你想返回实例,请尝试'__new__' – JBernardo

回答

4
class Bike(object): 
    def __init__(self, color): 
     self.bikeColor = color 

myBike = Bike("blue") 

就够了。在Python中,__init__不是一个真正的构造函数 - 它是一个初始值设定项。它需要一个已建成的对象,并对其进行初始化(例如,设置其bikeColor属性

Python中也有一些更接近语义构造 - 。在__new__方法您可以在线阅读它(here is a good SO discussion),但我怀疑在这一点上你并不需要它

+1

'__init__'和C++或Java构造函数一样多,它也会初始化调用时已经存在的对象的成员。我不记得在任何C++或Java构造函数中看到'return this'。 '__new__'方法在Java或C++中做了**你不能做的事。我发现它经常声称'__init__'应该被称为初始化器,而'__new__'是一个构造器,它真的让我困惑。 – Ben

+1

听起来像你对术语有争议。重要的是要注意的是,Eli对所发生的事情的描述在所有方面都是基本正确的。如果你想称之为不同的东西,那取决于你。 –

+0

@Raymond是的,我对这个术语有争议。我不想称之为不同的东西,我想继续使用Python开发之前数十年使用的概念。 “'__init__'实际上不是一个构造函数”对于已经熟悉构造函数的新Python程序员来说是不必要的混淆,特别是当你用“__new__'是一个构造函数”跟随它的时候,因为__new__行为甚至更少* *像'__init__'那样的Java/C++构造函数。 – Ben

0

你可能会想出类似这样的东西,你想返回一个构造函数,在这种情况下,你可以使用一个单独的方法来做到这一点。 ,

class A: 
def __init__(self): 
    self.data = [] 
def newObj(self): 
    return A() 
相关问题