小知识点
小知识点之默认参数(直接在参数后边赋值,就是该参数的默认数值)
def qiuhe(a,b=8):
s = a+b
print(s)
qiuhe(1)
结果为9
类和方法的创建与调用
1、类class、方法def的创建和调用(创建对象xiao_ming即调用类,xiao_ming.run()即调用run()方法)
# 定义类的模版
class Person:
def run(self):
print("-----run------")
def est(self, food):
print("-----food is %s-----" % food)
def sleep(self):
print("-----sleep-----")
# 对象变量 = 类名
xiao_ming = Person()
# 调用方法
xiao_ming.run()
xiao_ming.est("chicken")
xiao_ming.sleep()
2、在类外部给类中对象添加属性(实际并不适用)
# 添加对象属性值
class cat:
"""当前是猫类"""
def eat(self):
print("-----%s 爱吃鱼------" % self.name)
def drink(self, water):
print("-----小猫咪要喝 %s------" % water)
# 调用类和方法
lazy_cat = cat()
# 添加name属性
lazy_cat.name = "tom_cat"
print(lazy_cat.name)
# 调用方法
lazy_cat.eat()
lazy_cat.drink("农夫山泉")
3、在类内部给类中对象添加属性(过渡方法)
# 添加对象属性值
class cat:
"""当前是猫类"""
def __init__(self):
"""初始化方法"""
self.name = "TOM_cat"
def eat(self):
print("-----%s 爱吃鱼------" % self.name)
def drink(self, water):
print("-----小猫咪要喝 %s------" % water)
# 调用类和方法
lazy_cat = cat()
print(lazy_cat.name)
# 调用方法
lazy_cat.eat()
lazy_cat.drink("农夫山泉")
4、最终常用版==》类只是模版,每个对象都可以有自己的name属性名
# 类模版
class Cat:
"""猫类"""
def __init__(self, new_name):
"""初始化方法"""
self.name = new_name
def eat(self):
print("——————%s 爱吃鱼——————" % self.name)
# 对象tom_cat调用方法eat
tom = Cat("TOM")
tom.eat()
# 对象bosimao调用方法eat
bosimao = Cat("波斯猫")
bosimao.eat()
输出结果如下:
——————TOM 爱吃鱼——————
——————波斯猫 爱吃鱼——————
三个实例
我们拿到需求时,一定先分析一下,谁作为类,类中属性,类中方法,是否需要初始化,调用方法时能否实现一个类多种对象的模式,多个类之间的调用,方法中参数的调用等。
实例1
小明爱跑步(简单类、对象)
1、需求:
- 小明体重75.0公斤
- 小明每次跑步会减肥0.5公斤
- 小明每次吃东西体重增加1公斤
2、分析:
跑步------>动态行为------>方法
吃东西------>动态行为------>方法
人类:
姓名------>属性
体重------>属性
跑步------>方法
吃 ------>方法
Person:
name
weight
_init__(self,name, weight)
run()
3、代码的实现:
# 小明爱跑步
class Person:
"""人类"""
def __init__(self, name, weight):
"""初始化人的属性"""
self.name = name
self.weight = weight
def __str__(self):
"""输出对象信息"""
return "姓名是%s 体重是%.2fkg" % (self.name, self.weight)
def run(self):
print("%s 爱跑步,每次跑步减肥0.5kg" % self.name)
self.weight -= 0.5
def eat(self):
print("%s 是一个吃货,每次吃东西增加1kg" % self.name)
self.weight += 1
xiao = Person("小明", 75.0)
print(xiao)
xiao.run()
print(xiao)
xiao.eat()
print(xiao)
print("-"*30)
mei = Person("小美",44.0)
mei.run()
print(mei)
mei.eat()
print(mei)
实例2
家具的摆放(涉及类和对象的引用)
1、需求
- 房子(House)有户型、总面积和家具名称列表
新房子没有任何的家具
- 家具(Houseltem)有名字和占地面积,其中
席梦思(bed)占地4平米
衣柜(chest)占地2平米
餐桌(table)占地1.5平米
- 将以上三件家具添加到房子中
- 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
2、分析
House:
house_type
area
item_list
free_area
_init_(self,house_type, area)_str_(self)
add_item(self, item)
HouseItem
name
area
__init__(self,name, area):
__str__(self):
3、代码的实现:
# 摆放家具
class HouseItem:
"""家具类"""
def __init__(self, name, area):
"""初始化方法"""
self.name = name
self.area = area
def __str__(self):
"""打印家具对象的信息"""
return "家具名字是:%s 占地面积是%.1f平米" % (self.name, self.area)
# 使用家具类创建对象
bed = HouseItem("席梦思", 4)
print(bed)
chest = HouseItem("衣柜", 2)
print(chest)
table = HouseItem("餐桌", 1.5)
print(table)
class House:
"""房子类"""
def __init__(self, house_type, area):
"""初始化方法"""
# 房子户型
self.house_type = house_type
# 房子的总面积
self.area = area
# 房子的剩余面积,新房子没有占用,剩余面积就是总面积
self.free_area = area
# 新房子没有家具,家具列表为空
self.item_list = []
def __str__(self):
"""打印房子的信息"""
return "房子的户型是%s,总面积是:%.2f平米,剩余面积是:%.2f平米,家具名称列表是%s" % (
self.house_type, self.area, self.free_area, self.item_list)
def aad_item(self, item):
"""添加家具的方法"""
# 判断房子的剩余面积和家具的面积大小
if self.free_area < item.area:
print("不能再添加家具了")
return
else:
self.free_area -= item.area
self.item_list.append(item.name)
print("已经把%s添加的房子中了" % item.name)
# 使用房子类创建对象
big_house = House("大别墅", 60)
print(big_house)
# 向房子中添加席梦思床
big_house.aad_item(bed)
print(big_house)
# 向房子中添加衣柜
big_house.aad_item(chest)
print(big_house)
# 向房子中添加餐桌
big_house.aad_item(table)
print(big_house)
4、输出结果:
家具名字是:席梦思 占地面积是4.0平米
家具名字是:衣柜 占地面积是2.0平米
家具名字是:餐桌 占地面积是1.5平米
房子的户型是大别墅,总面积是:60.00平米,剩余面积是:60.00平米,家具名称列表是[]
已经把席梦思添加的房子中了
房子的户型是大别墅,总面积是:60.00平米,剩余面积是:56.00平米,家具名称列表是['席梦思']
已经把衣柜添加的房子中了
房子的户型是大别墅,总面积是:60.00平米,剩余面积是:54.00平米,家具名称列表是['席梦思', '衣柜']
已经把餐桌添加的房子中了
房子的户型是大别墅,总面积是:60.00平米,剩余面积是:52.50平米,家具名称列表是['席梦思', '衣柜', '餐桌']
实例3
士兵突击(涉及类和对象的相互调用)难
1、需求
- 士兵许三多有一把AK47
- 士兵可以开火
- 枪能够发射子弹
- 枪需要装填子弹—–增加子弹数量
2、分析
枪类:
类型-------->属性
子弹数量----->属性
发射-------->方法
装填子弹----->方法
Gun:
type
bullet_count
__init__(self,type)
shoot()
add_bullet()
士兵------>对象
许三多----->姓名----->属性
AK47----->枪----->属性
开火----->动作------>方法
士兵类:
姓名----->属性
枪------->属性
开火----->方法
Soldire:
name
gun
__init__(self,name,gun=None)
fire(self)
3、代码的实现:
# 士兵突击
class Gun:
"""抢类"""
def __init__(self, type):
"""初始化方法"""
self.type = type
# 子弹数量 新抢为0
self.bullect_count = 0
def shoot(self):
"""射击方法"""
# 先判断是否有子弹
if self.bullect_count <= 0:
# 无,提示添加子弹,代码不在执行
print("没有子弹,逗我玩呢?请添加子弹!!")
return
# 有,子弹数量减少
else:
# 假设射击一次一发
self.bullect_count -= 1
print("哔哔哔,,,打子弹啦剩余子弹为%d" % self.bullect_count)
def add_bullet(self, count):
"""添加子弹方法"""
self.bullect_count += count
# 士兵
class Sodier:
"""士兵类"""
def __init__(self, name, gun=None):
"""初始化方法"""
# 新兵默认没有枪
self.name = name
self.gun = gun
def add(self,new_count):
"""加子弹"""
# 判断是否有枪
if self.gun is None:
print("%s没有枪 请分配枪支!!" % self.name)
return
# 没有,提示分配枪支
# 有,加子弹
else:
self.gun.add_bullet(new_count)
def fire(self):
"""开枪方法"""
# 判断是否有枪
if self.gun is None:
print("%s没有枪 请分配枪支!!" % self.name)
return
# 没有,提示分配枪支
# 有,射击
else:
self.gun.shoot()
# # # 用枪类创建对象 !!!!
ak47 = Gun("AK47枪")
# 士兵类创建对象
ren = Sodier("许三多", ak47)
ren.add(50)
ren.fire()
ren.fire()
ren.fire()
4、输出结果:
哔哔哔,,,打子弹啦剩余子弹为49
哔哔哔,,,打子弹啦剩余子弹为48
哔哔哔,,,打子弹啦剩余子弹为47
5、难点突击——给出python内部引用关系图
转载请注明:XAMPP中文组官网 » python面向对象实例大全_类和方法的创建与调用