2011-10-24 4 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

いいえ、エラーが示すようにe – JBernardo

+1

これはイニシャライザです。インスタンスを返す場合は、 '__new__'を試してください。 – JBernardo

答えて

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

myBike = Bike("blue") 

で十分です。 Pythonでは、__init__は実際にはコンストラクタではありません。イニシャライザです。それは、すでに構築されたオブジェクトを受け取り、そのbikeColor属性を設定し、例えば(これを初期化し

Pythonはまた、意味的にコンストラクタに近い何かを持っている - 。)(あなたがオンラインそれについて読むことができますhere is a good SO discussion__new__方法を、私は疑います。この時点で実際には必要ではありません。

+1

' __init__'はC++やJavaのコンストラクタと同じくらい多くのコンストラクタで、呼び出された時点ですでに存在するオブジェクトのメンバも初期化します。私はC++やJavaのコンストラクタで 'return this'を見ることは思い出せません。 '__new__'メソッドは、JavaやC++で**できないものを**します。 '__init__'は初期化子と呼ばれるべきですが、' __new__'はコンストラクタであり、本当に私を混乱させると主張しています。 – Ben

+1

あなたは用語の紛争があるようです。注意すべき重要なことは、何が起こるかについてのエリの記述は、本質的にすべてのカウントで正しいということです。それを別のものと呼ぶ場合は、それはあなた次第です。 –

+0

@Raymondはい、私は専門用語で論争しています。私はそれを何か別のものにしたくないので、Pythonが開発される前に何十年も使われていた概念と同じ言葉を使い続けたいと思います。 "__init__は実際にはコンストラクタではありません"コンストラクタに慣れている新しいPythonプログラマにとっては、特に__new__がコンストラクタである場合、 * Java/C++コンストラクタのように、 '__init__'はそうです。 – Ben

0

このような場合は、コンストラクタを返す場所があります。その場合は、別の方法を使用してください。 、

class A: 
def __init__(self): 
    self.data = [] 
def newObj(self): 
    return A() 
関連する問題