Orientado a objetos: ejercicio de caso de encapsulación de clases simples de Python

01. Embalaje

  1. La encapsulación es una característica importante de la programación orientada a objetos
  2. Programación orientada a objetos en el primer paso : los atributos y métodos empaquetados en una clase abstracta en
  3. El mundo exterior usa una clase para crear un objeto y luego deja que el objeto llame a métodos
  4. Los detalles del método del objeto se encapsulan en el interior de la clase

02. Caso 1_Xiao Ming Ai corriendo

demanda

  1. Peso de Xiaoming75.0 kg
  2. Xiao Ming cada corredor perderá peso 0.5kilo
  3. Xiao Ming cada uno comiendo aumento de peso 1kg

Sugerencia: Objeto de método interno , ¡puede acceder directamente a los atributos del objeto !

  • Código:
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. Caso 2_ Colocar muebles

demanda

  1. Casa (Casa) tiene unidades , el área total y la lista de nombres de muebles
    • La nueva casa no tiene muebles.
  2. Los muebles (HouseItem) tienen nombres y cubren un área donde
    • Simmons (cama) cubre un área de 4metros cuadrados
    • Área de armario (cofre)2 metro cuadrado
    • Superficie de la mesa (mesa)1.5
  3. Los tres muebles anteriores añadidos a la casa en
  4. Al imprimir una casa, se requiere imprimir: tipo de casa , área total , área restante , lista de nombres de muebles

Área restante

  1. Al crear el objeto de la casa se define una propiedad del área restante , el valor inicial es igual al área total, y
  2. Cuando llame al add_itemmétodo, a la habitación para agregar muebles , deje que el área restante - = área de muebles

3.1 Crear muebles

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)

resumen

  1. Creó un mueble , para usar __init__y __str__dos métodos integrados.
  2. Utilice muebles para crear tres objetos de muebles e información de salida Muebles

3.2 Crear una habitación

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)

resumen

  1. Creación de una clase de casa , para usar __init__y __str__dos métodos integrados
  2. Preparando un add_itemmétodo listo para agregar muebles
  3. Usar la clase de la casa creó un objeto de la casa
  4. Deje que los objetos de la casa se llaman add_itemmétodo tres veces , los tres muebles a argumentos pasados ​​al add_iteminterior

3.3 Agregar muebles

demanda

  • 1> Analizando el área de los muebles si o excede el área restante , si se excede , no se puede solicitar que agregue el mueble
  • 2> El nombre de los muebles agregados a la lista de muebles de nombres de
  • 3> con el área restante de la casa - área de muebles
    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 Resumen

  • El programa principal sólo es responsable de la creación de la casa objetos y muebles objetos
  • Deje que eladd_item método de llamada del objeto de la casa se agregue a los muebles de la casa en
  • Los cálculos de área , el área restante , la lista de muebles y otros procesos se encapsulan en el interior de la clase de la casa.

04. Caso 3_ Asalto de un soldado

demanda

  1. El soldado Xu Sanduo tiene un AK47
  2. Los soldados pueden disparar
  3. Arma capaz de lanzar una bala
  4. Carga de armas balas de carga : para aumentar el número de balas

4.1 Desarrollo de armas

shoot Requisitos del método

  • 1> Juzga si hay balas, no puedes disparar sin balas
  • 2> use printconsejos para disparar y emite el número de balas
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 Desarrollar soldados

Supuestos: todos los reclutas no tienen armas

Definir un atributo sin valor inicial

Al definir atributos, si algo no conoce la configuración del valor inicial , se puede establecer enNone

  • None La palabra clave no representa nada
  • Denota un objeto nulo , sin métodos ni propiedades, es una constante especial
  • Puede ser Noneasignado a cualquier variable

fire Requisitos del método

  • 1> Determina si hay un arma, no puedes cargar sin un arma
  • 2> Grita un eslogan
  • 3> cargando balas
  • 4> Disparo
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()

resumen

  1. Creando una clase de soldado , usa el __init__método incorporado
  2. Al definir atributos, si algo no conoce la configuración del valor inicial , se puede establecer enNone
  3. En el paquete de métodos internos, también puede hacer que sus propios objetos creados utilizando otras clases de llamadas de propiedad hayan sido empaquetados.

05. Operador de identidad

El operador de identidad se utiliza para comparar dos objetos cuyas direcciones de memoria son iguales, ya sea que se trate de una referencia al mismo objeto.

  • En Pythonla Nonecomparación, se recomienda utilizar el isjuicio
Operador descripción Ejemplo
es es juzgar si dos identificadores se refieren al mismo objeto x es y , 类似 id (x) == id (y)
no es no es juzgar si dos identificadores se refieren a objetos diferentes x no es y , 类似 id (a)! = id (b)

La diferencia entre es y ==:

isPara determinar dos variables, consulte lo mismo si el objeto
== para determinar el valor de la variable de referencia es igual

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a 
False
>>> b == a
True

Supongo que te gusta

Origin blog.csdn.net/david2000999/article/details/112918433
Recomendado
Clasificación