目次
01.パッケージング
- カプセル化は、オブジェクト指向プログラミングの主要な機能です
- 最初のステップでのオブジェクト指向プログラミング-の抽象クラスにパッケージ化された属性とメソッド
- 外の世界使用してクラスを作成するには、オブジェクトを、その後、オブジェクトの呼び出し方法を聞かせて
- オブジェクトのメソッドの詳細はされているカプセル化して、クラスの内部
02.ケース1_XiaoMingAiが実行中
要求する
- Xiaomingの 体重
75.0
kg - XiaoMing各ランナーは体重
0.5
キロを失います - シャオミン各食事体重増加
1
kg
ヒント:社内メソッドオブジェクトでは、オブジェクトに直接アクセスする属性を付けることができます。
- コード:
class Person:
"""人类"""
def __init__(self, name, weight):
self.name = name
self.weight = weight
def __str__(self):
return "我的名字叫 %s 体重 %.2f 公斤" % (self.name, self.weight)
def run(self):
"""跑步"""
print("%s 爱跑步,跑步锻炼身体" % self.name)
self.weight -= 0.5
def eat(self):
"""吃东西"""
print("%s 是吃货,吃完这顿再减肥" % self.name)
self.weight += 1
xiaoming = Person("小明", 75)
xiaoming.run()
xiaoming.eat()
xiaoming.eat()
print(xiaoming)
03.ケース2_家具を置く
要求する
- 家(家)には、ユニット、総面積、家具名リストがあります
- 新しい家には家具がありません
- 家具(HouseItem)持っている名前とカバーエリア
- シモンズ(ベッド)は
4
平方メートルの領域をカバーしています - ワードローブ(胸)面積
2
平方メートル - テーブル(テーブル)面積
1.5
m²
- シモンズ(ベッド)は
- 上記の3つの家具 が家に追加されました
- 家を印刷するときは、家のタイプ、総面積、残りの面積、家具名のリストを出力する必要があります
残りのエリア
- 家のオブジェクトを作成するときに残りの領域のプロパティを定義すると、初期値は合計領域に等しくなり、
add_item
メソッドを呼び出すとき、家具を追加する部屋に、残りの領域-=家具領域を許可します
3.1家具を作成する
class HouseItem:
def __init__(self, name, area):
"""
:param name: 家具名称
:param area: 占地面积
"""
self.name = name
self.area = area
def __str__(self):
return "[%s] 占地面积 %.2f" % (self.name, self.area)
# 1. 创建家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
print(bed)
print(chest)
print(table)
概要
- 使用する家具
__init__
と__str__
2つの組み込みメソッドを作成しました - 家具を使用して3つの家具オブジェクトを作成し、情報を出力します家具
3.2部屋を作成する
class House:
def __init__(self, house_type, area):
"""
:param house_type: 户型
:param area: 总面积
"""
self.house_type = house_type
self.area = area
# 剩余面积默认和总面积一致
self.free_area = area
# 默认没有任何的家具
self.item_list = []
def __str__(self):
# Python 能够自动的将一对括号内部的代码连接在一起
return ("户型:%s\n总面积:%.2f[剩余:%.2f]\n家具:%s"
% (self.house_type, self.area,
self.free_area, self.item_list))
def add_item(self, item):
print("要添加 %s" % item)
...
# 2. 创建房子对象
my_home = House("两室一厅", 60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)
概要
- 使用する家のクラス
__init__
と__str__
2つの組み込みメソッドの作成 - 家具を追加する準備ができている
add_item
メソッドを準備する - 家のクラスを使用して家のオブジェクトを作成しました
- してみましょう家はオブジェクトと呼ばれる3回の
add_item
方法、3つの家具に渡される引数にadd_item
インテリア
3.3家具を追加する
要求する
- 1>分析 家具面積をかどうか、残りの領域を超え、超過した場合に、家具の一部を追加するように指示することはできません
- 2>家具の名前がに追加名前の家具リストの
- 3>家の残りのエリア-家具エリア
def add_item(self, item):
print("要添加 %s" % item)
# 1. 判断家具面积是否大于剩余面积
if item.area > self.free_area:
print("%s 的面积太大,不能添加到房子中" % item.name)
return
# 2. 将家具的名称追加到名称列表中
self.item_list.append(item.name)
# 3. 计算剩余面积
self.free_area -= item.area
3.4まとめ
- メインプログラムは、家のオブジェクトと家具のオブジェクトの作成のみを担当します
- ましょう家オブジェクトの呼び出し
add_item
方法は、家の家具に追加されますで - 面積計算、残りの面積、家具リスト、その他の処理は、家のクラスの内部にカプセル化されます
04.ケース3_兵士の暴行
要求する
- 兵士 徐SanduoはAK47を持っています
- 兵士は発砲できます
- 弾丸を発射できる銃
- 銃の装填装填弾丸-弾丸の数を増やすため
4.1銃の開発
shoot
メソッドの要件
- 1>弾丸があるかどうかを判断します。弾丸なしでは撃てません
- 2>
print
射撃のヒントを使用し、弾丸の数を出力します
class Gun:
def __init__(self, model):
# 枪的型号
self.model = model
# 子弹数量
self.bullet_count = 0
def add_bullet(self, count):
self.bullet_count += count
def shoot(self):
# 判断是否还有子弹
if self.bullet_count <= 0:
print("没有子弹了...")
return
# 发射一颗子弹
self.bullet_count -= 1
print("%s 发射子弹[%d]..." % (self.model, self.bullet_count))
# 创建枪对象
ak47 = Gun("ak47")
ak47.add_bullet(50)
ak47.shoot()
4.2兵士の育成
仮定:すべての新兵は銃を持っていません
初期値のない属性を定義する
属性を定義するときに、初期値の設定がわからない場合は、次のように設定できます。None
None
キーワードは何も表さない- 示しヌルオブジェクト、ないメソッドとプロパティは、特別な定数であります
None
任意の変数に割り当てることができます
fire
メソッドの要件
- 1>銃があるかどうかを確認します。銃なしでは充電できません
- 2>スローガンを叫ぶ
- 3>弾丸をロードする
- 4>射撃
class Soldier:
def __init__(self, name):
# 姓名
self.name = name
# 枪,士兵初始没有枪 None 关键字表示什么都没有
self.gun = None
def fire(self):
# 1. 判断士兵是否有枪
if self.gun is None:
print("[%s] 还没有枪..." % self.name)
return
# 2. 高喊口号
print("冲啊...[%s]" % self.name)
# 3. 让枪装填子弹
self.gun.add_bullet(50)
# 4. 让枪发射子弹
self.gun.shoot()
概要
- 兵士クラスを作成するには、
__init__
組み込みのメソッドを使用します - 属性を定義するときに、初期値の設定がわからない場合は、次のように設定できます。
None
- パッケージ内部メソッド、あなたも作ることができ、独自 のプロパティの他のクラス使用して作成されたオブジェクトの呼び出しがされている方法をパッケージ化
05.アイデンティティ演算子
ID演算子は、メモリアドレスの2つのオブジェクトが同じであるかどうかを比較するために使用されます-同じオブジェクトへの参照であるかどうか
Python
するためにNone
、比較、使用することをお勧めしますis
判断を
オペレーター | 説明 | インスタンス |
---|---|---|
です | 2つの識別子が同じオブジェクトを参照しているかどうかを判断することです | xはy、クラス類似id(x)== id(y) |
ではありません | 2つの識別子が異なるオブジェクトを参照しているかどうかを判断することではありません | xはyではありません、クラス類似id(a)!= id(b) |
isと==の違い:
is
決定するための2つの変数を対象かどうかを同じを参照して
==
決定するための参照変数の値が等しいです
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a
False
>>> b == a
True