2012-02-26 15 views
2

フォーク、Pythonクラスの初期化

ノードクラスの次の2つの定義が同じかどうかは疑問ですか?

class node: 
    left = None 
    right= None 
    def __init__(self, data): 
     self.data = data 


class node: 
    def __init__(self, data): 
     self.data = data 
     self.left = None 
     self.right= None 

私にお知らせいただきありがとうございます。

答えて

7

いいえ、それらは同じではありません。

第2の定義では、node.leftnode.rightは存在しません。 rightおよびleft属性は、クラスの初期化されたインスタンスにのみ存在します。ただし、最初の定義では、クラスに直接node.leftnode.rightにアクセスできます。インスタンス化する必要はありません。

+1

また、 'node.left = 10'を実行することができ、' node'インスタンスはすべて(最初のコードチャンクを使用している場合) 'a.left == 10'を持ちます。 – Blender

+1

ファーストクラスの値は、インスタンス化するときに使用できます。クラス値とは独立して設定することもできます。したがって、インスタンス化せずにそれらにアクセスする以外に、両方のクラスはほぼ同じです。 –