Python基础
- Python基础-PEP8: Python代码风格指南
- Python基础-面向对象(四)
- Python基础-面向对象(三)
- Python基础-面向对象(二)
- Python基础-面向对象(一)
- Python基础-模块
- Python基础-异常的捕获和处理
- Python基础-文件夹的操作
- Python基础-文件的操作
- Python基础-函数(三)
- Python基础-函数(二)
- Python基础-函数(一)
- Python基础-字符串,元组,列表,字典,集合之间的相互转
- Python基础-字符串,元组,数组,字典-公共方法
- Python基础-集合set
- Python基础-字典
- Python基础-元组
- Python基础-列表
- Python基础-字符串
- Python基础-break和continue
- Python基础-for循环
- Python基础-while循环
- Python基础-if判断语句
- Python基础-数据类型转换,ASCII码对照表
- Python基础-运算符
- Python基础-输出print和输入input
- Python基础-标识符和关键字
- Python基础-变量以及类型
- Python基础-注释的引入
- Python基础-第一个python程序
- Python基础-简介
Python基础-面向对象(二)
Python基础-面向对象(二)
__str__()方法
这个方法是一个魔法方法 (Magic Method) ,用来显示信息
该方法需要 return 一个数据,并且只有self一个参数,当在类的外部 print(对象) 则打印这个数据
当类的实例化对象如果没有__str__ 则默认打印 对象在内存的地址。如果拥有 __str__ 方法后,那么打印对象则打印 __str__ 的返回值。
查看类的文档说明,也就是类的注释:print(Hero.__doc__)
class Hero(object): """定义了一个英雄类,可以移动和攻击""" def __init__(self, name, skill, hp, atk, armor): """ __init__() 方法,用来做变量初始化 或 赋值 操作""" # 英雄名 self.name = name # 实例变量 # 技能 self.skill = skill # 生命值: self.hp = hp # 实例变量 # 攻击力 self.atk = atk # 护甲值 self.armor = armor def move(self): """实例方法""" print("%s 正在前往事发地点..." % self.name) def attack(self): """实例方法""" print("发出了一招强力的%s..." % self.skill) def __str__(self): """ 这个方法是一个魔法方法 (Magic Method) ,用来显示信息 该方法需要 return 一个数据,并且只有self一个参数,当在类的外部 print(对象) 则打印这个数据 """ return "英雄【%s】的数据: 生命值 %d, 攻击力 %d, 护甲值 %d" % (self.name, self.hp, self.atk, self.armor) taidamier = Hero("泰达米尔", "旋风斩", 2600, 450, 200) gailun = Hero("盖伦", "大宝剑", 4200, 260, 400) # 如果没有__str__ 则默认打印 对象在内存的地址。 # 当类的实例化对象 拥有 __str__ 方法后,那么打印对象则打印 __str__ 的返回值。 print(taidamier) # 英雄【泰达米尔】的数据: 生命值 2600, 攻击力 450, 护甲值 200 print(gailun) # 英雄【盖伦】的数据: 生命值 4200, 攻击力 260, 护甲值 400 # 查看类的文档说明,也就是类的注释 print(Hero.__doc__) # 定义了一个英雄类,可以移动和攻击
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法。
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据。
__str__方法通常返回一个字符串,作为这个对象的描述信息
__del__()方法
创建对象后,python解释器默认调用__init__()方法;
当删除对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法
class Hero(object): # 初始化方法 # 创建完对象后会自动被调用 def __init__(self, name): print('__init__方法被调用') self.name = name # 当对象被删除时,会自动被调用 def __del__(self): print("__del__方法被调用") print("%s 被 GM 干掉了..." % self.name) # 创建对象 taidamier = Hero("泰达米尔") # 删除对象 print("%d 被删除1次" % id(taidamier)) del(taidamier) print("--" * 10) gailun = Hero("盖伦") gailun1 = gailun gailun2 = gailun print("%d 被删除1次" % id(gailun)) del(gailun) print("%d 被删除1次" % id(gailun1)) del(gailun1) print("%d 被删除1次" % id(gailun2)) del(gailun2) ''' 输出结果 __init__方法被调用 139881105243440 被删除1次 __del__方法被调用 泰达米尔 被 GM 干掉了... -------------------- __init__方法被调用 139881105242488 被删除1次 139881105242488 被删除1次 139881105242488 被删除1次 __del__方法被调用 盖伦 被 GM 干掉了... '''
当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
当使用del() 删除变量指向的对象时,则会减少对象的引用计数。如果对象的引用计数不为1,那么会让这个对象的引用计数减1,当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)。
面向对象实例:烤地瓜
目标
强化面向对象编程的设计能力,进一步理解类、属性、方法的构建场景
强化对self的理解,方法中使用self可以获取和修改属性烤地瓜规则:
1.地瓜有自己的状态,默认是生的,地瓜可以进行烧烤
2地瓜有自己烧烤的总时间,由每次烧烤的时间累加得出
3.地瓜烧烤时,需要提供本次烧烤的时间
4.地瓜烧烤时,地瓜状态随着烧烤总时间的变化而改变: [0, 3)生的、[3, 6)半生不熟、[6, 8)熟了、>=8烤糊了
5.输出地瓜信息时,可以显示地瓜的状态和烧烤的总时间# 新型一个新型类SweetPotato class SweetPotato(object): ''' 烤地瓜的文档说明 ''' # 初始化属性CookeLevel(一共烤的时间),CookedString(地瓜状态),Condiments(调料列表) def __init__(self): self.CookedLevel = 0 self.CookedString = '生的' self.Condiments = [] # 烤地瓜的方法 def cook(self,time): self.CookedLevel += time if self.CookedLevel > 8: self.CookedString = '烤糊了' elif self.CookedLevel > 5: self.CookedString = '烤好了' elif self.CookedLevel > 3: self.CookedString = '烤的半生不熟' else: self.CookedString = '生的' # 添加调料的方法 def add_condiments(self,condiments): self.Condiments.append(condiments) # print的输出信息 def __str__(self): if len(self.Condiments) > 0: str_Condiments = ','.join(self.Condiments) # 列表转字符串 return '地瓜烤了%d分钟,%s,调料是%s' % (self.CookedLevel,self.CookedString,str_Condiments) else: return '地瓜烤了%d分钟,%s,没有调料' % (self.CookedLevel, self.CookedString) print(SweetPotato.__doc__) # 查看类的文档说明:烤地瓜的文档说明 mysweetpotao = SweetPotato() # 实例化一个对象 mysweetpotao.cook(2) print(mysweetpotao) # 地瓜烤了2分钟,生的,没有调料 mysweetpotao.cook(2) mysweetpotao.add_condiments('番茄酱') print(mysweetpotao)# 地瓜烤了4分钟,烤的半生不熟,调料是番茄酱 mysweetpotao.cook(3) mysweetpotao.add_condiments('辣椒酱') print(mysweetpotao) # 地瓜烤了7分钟,烤好了,调料是番茄酱,辣椒酱 mysweetpotao.cook(2) mysweetpotao.add_condiments('芥末') print(mysweetpotao) #地瓜烤了9分钟,烤糊了,调料是番茄酱,辣椒酱,芥末
最后修改:2020年3月1日 22:21