2016-08-04 6 views
0

私は以下の非常に簡単なPythonコードを実行します。私はそれが実際に走っていることに非常に驚いています。誰かが私に "nd"と "hel"の値をクラス定義で定義せずに割り当てることができる理由を私に説明できましたか?属性はインスタンスレベルで追加できますか?Pythonでこのクラスを使用するのはなぜですか?

class tempClass(object): 

a = tempClass() 
a.nd = 1 
a.hel = 'wem3' 
+1

オブジェクトの設計方法によって、割り当てによって属性を作成することができます。関数(関数はオブジェクトです)で同じことを試してください:関数 '' 'f'''を定義し、属性を' '' f.new = 1''''に追加してください。 '' '...はインスタンスレベルで追加できますか?' '属性はクラス自体に同じように追加できます。 – wwii

+0

ありがとう、@wwii。クラスのインスタンスに、属性ではなく関数を追加して動作しますか?私はそれを試してみました。うまく行かなかった。しかし、私はそれを正しい方法でやっていないかもしれません。 – Hans

+0

関数を定義し、クラスまたはインスタンス属性に関数名を割り当てます。 '' 'def f():print( '1'); tempClass.foo = f'''。 – wwii

答えて

2

Pythonには変数宣言の概念はなく、割り当てのみがあります。アトリビュートにも同じことが適用されます。アトリビュートを導入するには、初期値を割り当てるだけです。

この点については、__init__メソッドについて特別なことはありません。たとえば、

class TempClass(object): 
    def __init__(self): 
     self.nd = 1 

a = tempClass() 
a.hel = 'wem3' 

両方の属性は同じ方法で作成されます。値を割り当てることによってこれらの属性が作成されます。最初にaが作成されたときに__init__が呼び出されますが、それ以外の場合は特殊ではありません。 self__init__は、aで参照されるオブジェクトへの参照であるため、self.nd = 1a.nd = 1と同じです。オブジェクトの作成後、a.helが作成され、同じプロセスで'wem3'で初期化されます。

関連する問題