オブジェクト指向:Pythonの単純なクラスカプセル化のケース演習

01.パッケージング

  1. カプセル化は、オブジェクト指向プログラミングの主要な機能です
  2. 最初のステップでのオブジェクト指向プログラミング-の抽象クラスパッケージ化された属性メソッド
  3. 外の世界使用してクラスを作成するには、オブジェクトを、その後、オブジェクトの呼び出し方法を聞かせて
  4. オブジェクトのメソッドの詳細はされているカプセル化して、クラスの内部

02.ケース1_XiaoMingAiが実行中

要求する

  1. Xiaomingの 体重 75.0kg
  2. XiaoMing各ランナーは体重0.5キロを失います
  3. シャオミン各食事体重増加1kg

ヒント:社内メソッドオブジェクトは、オブジェクトに直接アクセスする属性を付けることができます

  • コード:
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_家具を置く

要求する

  1. 家(家)には、ユニット総面積家具名リストがあります
    • 新しい家には家具がありません
  2. 家具(HouseItem)持っている名前カバーエリア
    • シモンズ(ベッド)4平方メートルの領域をカバーしています
    • ワードローブ(胸)面積2平方メートル
    • テーブル(テーブル)面積1.5
  3. 上記の3つの家具 追加さました
  4. 家を印刷するときは、家のタイプ総面積残りの面積家具名のリストを出力する必要があります

残りのエリア

  1. 家のオブジェクトを作成するときに残りの領域のプロパティを定義する、初期値は合計領域に等しくなり、
  2. 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)

概要

  1. 使用する家具__init____str__2つの組み込みメソッドを作成しました
  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)

概要

  1. 使用する家のクラス__init____str__2つの組み込みメソッドの作成
  2. 家具を追加する準備ができているadd_itemメソッドを準備する
  3. 家のクラスを使用して家のオブジェクトを作成しまし
  4. してみましょう家はオブジェクトと呼ばれる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_兵士の暴行

要求する

  1. 兵士 徐SanduoAK47を持っています
  2. 兵士発砲できます
  3. 弾丸発射できる
  4. 銃の装填装填弾丸-弾丸の数を増やすため

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()

概要

  1. 兵士クラスを作成するには、__init__組み込みのメソッドを使用します
  2. 属性を定義するときに、初期値の設定がわからない場合、次のように設定できます。None
  3. パッケージ内部メソッド、あなたも作ることができ、独自 のプロパティの他のクラス使用して作成されたオブジェクトの呼び出しがされている方法をパッケージ化

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

おすすめ

転載: blog.csdn.net/david2000999/article/details/112918433