Tabla de contenido
01. Embalaje
- La encapsulación es una característica importante de la programación orientada a objetos
- Programación orientada a objetos en el primer paso : los atributos y métodos empaquetados en una clase abstracta en
- El mundo exterior usa una clase para crear un objeto y luego deja que el objeto llame a métodos
- Los detalles del método del objeto se encapsulan en el interior de la clase
02. Caso 1_Xiao Ming Ai corriendo
demanda
- Peso de Xiaoming
75.0
kg - Xiao Ming cada corredor perderá peso
0.5
kilo - Xiao Ming cada uno comiendo aumento de peso
1
kg
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
- Casa (Casa) tiene unidades , el área total y la lista de nombres de muebles
- La nueva casa no tiene muebles.
- Los muebles (HouseItem) tienen nombres y cubren un área donde
- Simmons (cama) cubre un área de
4
metros cuadrados - Área de armario (cofre)
2
metro cuadrado - Superficie de la mesa (mesa)
1.5
m²
- Simmons (cama) cubre un área de
- Los tres muebles anteriores añadidos a la casa en
- Al imprimir una casa, se requiere imprimir: tipo de casa , área total , área restante , lista de nombres de muebles
Área restante
- Al crear el objeto de la casa se define una propiedad del área restante , el valor inicial es igual al área total, y
- Cuando llame al
add_item
mé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
- Creó un mueble , para usar
__init__
y__str__
dos métodos integrados. - 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
- Creación de una clase de casa , para usar
__init__
y__str__
dos métodos integrados - Preparando un
add_item
método listo para agregar muebles - Usar la clase de la casa creó un objeto de la casa
- Deje que los objetos de la casa se llaman
add_item
método tres veces , los tres muebles a argumentos pasados aladd_item
interior
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 el
add_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
- El soldado Xu Sanduo tiene un AK47
- Los soldados pueden disparar
- Arma capaz de lanzar una bala
- 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
print
consejos 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
None
asignado 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
- Creando una clase de soldado , usa el
__init__
método incorporado - Al definir atributos, si algo no conoce la configuración del valor inicial , se puede establecer en
None
- 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
Python
laNone
comparación, se recomienda utilizar elis
juicio
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 ==:
is
Para 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