Orientado a objetos: exercício de caso de encapsulamento de classe simples em Python

01. Embalagem

  1. O encapsulamento é um recurso importante da programação orientada a objetos
  2. Programação orientada a objetos na primeira etapa - os atributos e métodos empacotados em uma classe abstrata em
  3. O mundo exterior usa uma classe para criar um objeto e, em seguida, permite que o objeto chame métodos
  4. Detalhes do método do objeto são encapsulados no interior da classe

02. Caso 1_Xiao Ming Ai em execução

exigem

  1. Peso de Xiaoming75.0 kg
  2. Xiao Ming cada corredor perderá 0.5quilo de peso
  3. Xiao Ming cada comendo ganho de peso 1kg

Dica: Objeto de método interno , ele pode acessar diretamente o 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_ Móveis de mesa

exigem

  1. Casa (casa) tem unidades , a área total e lista de nomes de móveis
    • A nova casa não tem mobília
  2. Móveis (HouseItem) têm nomes e abrangem uma área onde
    • Simmons (cama) cobre uma área de 4metros quadrados
    • Área do guarda-roupa (peito)2 metros quadrados
    • Área da mesa (mesa)1.5
  3. Os três móveis acima adicionados à casa em
  4. Ao imprimir uma casa, é necessário produzir: tipo de casa , área total , área restante , lista de nomes de móveis

Área restante

  1. Ao criar o objeto casa é definida uma propriedade da área restante , o valor inicial é igual à área total, e
  2. Quando você chama o add_itemmétodo, para adicionar móveis à sala , deixe a área restante - = área de móveis

3.1 Criar móveis

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)

resumo

  1. Criei um móvel , para usar __init__e __str__dois métodos embutidos
  2. Use móveis para criar três objetos de móveis e informações de saída Móveis

3.2 Criar uma sala

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)

resumo

  1. Criando uma classe de casa , para usar __init__e __str__dois métodos embutidos
  2. Preparando um add_itemmétodo pronto para adicionar móveis
  3. Use a classe de casa para criar um objeto de casa
  4. Deixe os objetos da casa chamados de add_itemmétodo de três vezes , os três móveis para os argumentos passados ​​para o add_iteminterior

3.3 Adicionar mobília

exigem

  • 1> Analisando a área do móvel se excede ou excede a área restante , se excedido , não pode ser solicitado a adicionar o móvel
  • 2> O nome do mobiliário adicionado à lista de nomes de móveis de
  • 3> com a área restante da casa - área de móveis
    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 Resumo

  • O programa principal é responsável apenas pela criação de objetos de casa e objetos de mobília
  • Deixe oadd_item método de chamada de objeto de casa ser adicionado à mobília da casa em
  • Cálculos de área , a área restante , lista de móveis e outros processos são encapsulados no interior da classe de casa

04. Caso 3_ Ataque de soldado

exigem

  1. Soldado Xu Sanduo tem uma AK47
  2. Soldados podem atirar
  3. Arma capaz de lançar uma bala
  4. Gun loading loading bullets - para aumentar o número de balas

4.1 Desenvolvimento de armas

shoot Requisitos de método

  • 1> Julgue se há balas, você não pode atirar sem balas
  • 2> use printdicas de tiro e produz o 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 Desenvolver Soldados

Suposições: Todos os recrutas não têm armas

Defina um atributo sem valor inicial

Ao definir atributos, se algo não souber a configuração do valor inicial , ele pode ser definido comoNone

  • None A palavra-chave não representa nada
  • Denota um objeto nulo , sem métodos e propriedades, é uma constante especial
  • Você pode ser Noneatribuído a qualquer variável

fire Requisitos de método

  • 1> Determine se há uma arma, você não pode carregar sem uma arma
  • 2> Grite um slogan
  • 3> Carregando marcadores
  • 4> Tiro
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()

resumo

  1. Criando uma classe de soldado , use o __init__método integrado
  2. Ao definir atributos, se algo não souber a configuração do valor inicial , ele pode ser definido comoNone
  3. No pacote de métodos internos, você também pode fazer seus próprios objetos criados usando outras classes de chamadas de propriedade foram empacotados método

05. Operador de identidade

O operador de identidade é usado para comparar dois objetos de endereços de memória são os mesmos - se é uma referência ao mesmo objeto

  • PythonNo Para Nonecomparação, é recomendado o uso de isjulgamento
Operador Descrição Instância
é é julgar se dois identificadores se referem ao mesmo objeto x é y, 类似 id (x) == id (y)
não não é julgar se dois identificadores se referem a objetos diferentes x não é y, 类似 id (a)! = id (b)

A diferença entre é e ==:

isPara determinar duas variáveis, consulte o mesmo se o objeto
== para determinar o valor da variável de referência é igual

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

Acho que você gosta

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