フィールドとは
オブジェクトの特徴
キャラクターの「名前」「職業」「体力」など、「特徴」をクラス定義したものをフィールドといいます。
フィールドの例
- 名前 : アリス
- 職業 : 魔法使い
- 体力 : 30
フィールド定義
フィールド定義はオブジェクトの特徴にあわせて「フィールド名」や「データ型」を決める必要があります。
項目 | フィールド名 | データ型 |
---|---|---|
キャラクター名 | name | String |
職業 | job | String |
体力 | hp | int |
フィールドとメンバー変数
メンバー変数
クラス内に定義する変数をメンバー変数といいます。OOPではインスタンスで扱うメンバー変数(staticでない)のことをインスタンス変数ともいいます。
class Person:
# メンバー変数(インスタンス変数)
name:str name
フィールドとプロパティの違い
フィールドのことをプログラム言語によってはプロパティともいいます。
フィールド定義の基本
フィールド定義はクラスの中に「修飾子」「データ型」「変数名」を記述します。
class クラス名:
# フィールド定義
データ型:データ型 変数名
アクセス修飾子
アクセス修飾子を使うと「クラス」「フィールド」「メソッド」のアクセスを外部プログラムから制限します。
アクセス修飾子 | 範囲 |
---|---|
public | すべてのクラスからアクセス |
protected | 自分のクラスとサブクラスからアクセス |
なし | 自分のクラスと同じパッケージのクラスからアクセス |
private | 自分のクラスからだけアクセス |
クラスの生成
Characterクラスを作成して、フィールド定義してみましょう。
ファイル構成
samples/
├── main_app1.py
└── models/
└── Person.py
フィールド定義
プログラミングする前に、生成するオブジェクトの特徴を定義しておきます。
項目 | フィールド名 | データ型 | アクセス修飾子 |
---|---|---|---|
キャラクター名 | name | str | public |
職業 | job | str | public |
体力 | hp | int | public |
クラスファイルにフィールド定義
Personクラスにフィールド定義します。
models/Person.py
class Person:
name:str = ""
job:str = ""
hp:int = 0
フィールドのアクセス
. (ピリオド)をつけてアクセス
フィールドはインスタンスオブジェクトに「 . 」(ピリオド)をつけてアクセスします。メンバー変数のアクセスはフィールド名で指定します。
インスタンス.フィールド名
フィールドのアクセスの例
wizardオブジェクトのnameフィールドにアクセスすします。Personクラスがpublicになっているので外部からアクセス可能です。
wizard.name
フィールドのデータ表示
Personオブジェクトのデータをコンソールで確認してみましょう。
main_app1.py
from models.Person import Person
wizard:Person = Person()
print(wizard.name)
print(wizard.job)
print(wizard.hp)
Characterオブジェクトのフィールドデータが表示されました。現在は何も設定していないので空欄と「0」が表示されます。
結果
0
フィールドの利用
フィールドにデータを代入
フィールドにデータを代入します。
main_app1.py
from models.Person import Person
wizard:Person = Person()
wizard.name = "アリス"
wizard.job = "Wizard"
wizard.hp = 30
print(wizard.name)
print(wizard.job)
print(wizard.hp)
結果
アリス
wizard
30
新規インスタンス
別のキャラクターのインスタンスwarriorを作成し、フィールドを設定します。
main_app1.py
warrior:Person = Person()
warrior.name = "ボブ"
warrior.job = "Warrior"
warrior.hp = 50
print(warrior.name)
print(warrior.job)
print(warrior.hp)
このようにCharacterクラスを元に、キャラクターの特徴が違った別々のオブジェクトが生成できます。
結果
ボブ
warrior
50
演習
問題1
zooパッケージにAnimalクラスを作成し、つぎの内容でフィールドを定義してみましょう。
項目 | フィールド名 | データ型 | アクセス修飾子 |
---|---|---|---|
種別 | type | str | public |
名前 | name | str | public |
鳴き声 | crying | str | public |
問題2
zooパッケージにメインプログラムAnimalAppを作成し、Animalインスタンスを生成してみましょう。
プログラム例
dog:Animal = nimal()
問題3
Animalインスタンスに、つぎの内容でフィールドデータを更新して確認してみましょう。
項目 | フィールド名 | 値 |
---|---|---|
種別 | type | dog |
名前 | name | タロー |
鳴き声 | crying | わん! |