名前空間
名前空間とは?
名前空間とは、変数やアトリビュートが所属する場所のことです。
「名前空間」の「名前」は変数やアトリビュートにつける「名前」から来ています。
コードの中でのどのような位置にで最初に変数やアトリビュートを定義したかで所属する名前空間がきまります。
ここでは変数を使ってその範囲のついて説明します。
名前空間
名前空間は以下のような範囲で分けられています。
グローバル変数
グローバル変数とは、クラス外で定義する変数の事をいいます。
ローカル変数
ローカル変数とは、クラス内で定義する変数の事をいいます。
同じ変数が使える理由
同じ変数がクラス内外で使える理由は下の図と解説を読んでください。
これはそれぞれの名前空間が違うので成立しています。
アンダースコアを使うと…
名前の先頭にアンダースコア(_)がついたアトリビュートやメソッドはクラスの内部だけで利用するためにあります。
クラス内で使いたいけどコマンドなどと被る名前を使いたい場合にも使えますが使わないようにしましょう。
これをつける事で外部からの書き換えをしてはいけないと知る事ができます。
アンダースコアを二個つけるとより厳しくアクセスを制限できます。
下の例のようにクラス外からは完全にアクセスできていないのがわかると思います
カプセル化
カプセル化はオブジェクト指向の重要な要素です。
クラスのメソッドだけで利用する変数をアトリビュートとして定義するとします。
クラスの内部で利用する変数なのですが、外部から簡単に書き換える事が可能です。
クラス内の変数を外部から書き換えてしまうと動かなくなる危険があります。
そのためにクラスの内部だけで利用するアトリビュートやメソッドを外部から
利用できなくしてしまうことをカプセル化といいます。
上で外部から利用できなくしているのはカプセル化をしているためです。
名前空間に関する問題
すべて正解できたら次の継承の章へ進みましょう
問題1 次の中でグローバル変数はどれでしょう?
H_NAME = "水素" |
class  Atomic(); |
...       def H(self,H_Name): |
...         self.H_NAME = H_Name |
...       def display(self,H_Name): |
...         print self.H_NAME |
... |
問題2 次のクラスの中でローカル変数はどれでしょ?
H_NAME = "水素" |
class  Atomic(); |
...       def H(self,H_Name): |
...         self.H_NAME = H_Name |
...       def display(self,H_Name): |
...         print self.H_NAME |