1 # 第20节课:面向对象--进阶 2 ''' 3 本节大纲: 4 1- 实例方法与静态方法 5 2- 动物园游戏设计 6 3- 对象组合 7 复习属性的概念: 8 属性即特征,分为实例属性和静态属性: 9 静态属性是指每个实例都共有的属性,比如nickname=人类 10 实例属性是指不同的类不同的特征,比如每个人的身高体重年龄性别名字都不一样 11 实例属性是在__init__里面定义的,应为后续的调用很简单,创建实例初始化就会会自动执行 12 ''' 13 # 1- 对象的方法: 14 # 概念:通过定义在类里面的函数 15 # 实例方法:每个具体实例相关的方法===方法的本质是函数 16 # 静态方法:共有的方法,与每个具体实例无关===方法的本质是函数 17 # 1-1 实例方法:实例调用的方法 18 # 2-1 类方法:类去调用的 19 # class Person: 20 # nickname = '六六' 21 # def __init__(self,iname,iage,iweight):#实例方法一定要有实例self 22 # self.name=iname 23 # self.age=iage 24 # self.wei=iweight 25 # def eat(self): #eat()这个实例去调用了方法,是实例方法 26 # self.wei+=10 27 # print('我在吃饭,重了十斤',self.wei) 28 # #类方法--类去调用的,实例调用也是可以的 29 # @classmethod #打声招呼,证明要调用类方法了 30 # def tell(cls): #定义一个类方法,类方法一定要有类cls 31 # print('这是类方法') 32 # ll=cls.nickname='暴富' #类和实例调用这个类方法的时候,会把nickname中原本的六六变成暴富 33 # print(ll) 34 # #静态方法 35 # @staticmethod 36 # def run(): #静态方法的括号中什么都没有,就相当于类当中的普通函数 37 # print('我是静态方法') 38 # 39 # p1 = Person('tom', 23, 180) 40 # print(p1.nickname) #打印得六六 41 # p1.eat() #打印得:我在吃饭,重了十斤 190 42 # Person.tell() #可以用类去调用,打印得:这是类方法/n暴富 43 # p1.tell() #也可以用实例去调用,打印得:这是类方法/n暴富 44 # Person.run() #类可以调用静态方法 45 # p1.run() #实例也可以调用静态方法 46 47 # 2- 动物园游戏设计 48 ''' 49 游戏规则: 50 1.10个房间,每个里面可能是200斤老虎或者100斤羊 51 2.游戏开始后,系统随机给出房间号,游戏者喂里面的动物.喂老虎应该输入单词meat, 52 喂羊应该输入单词grass喂对了,体重加10斤。喂错了,体重减少10斤 53 3.敲房间的门,里面的动物会叫,老虎叫声音是‘Wow !!’,羊叫声是‘mie~~’。 54 动物每叫一次体重减5斤。。 55 4.游戏者强记每个房间的动物是什么,以便不需要敲门就可以喂正确的食物。 56 5.游戏2分钟结束后,看看你喂的动物总体重是多少 57 58 解读编程思路,定义三个类,分别是老虎,羊,房间.喂的操作用import 59 60 ''' 61 class Tiger: 62 nickName='老虎' 63 #判断应该定义什么实例属性还是静态属性,就看这个属性是否和每个个体有关,这里每只老虎的体重都不一样,所有要定义实例属性 64 def __init__(self,weight): 65 self.tweight=weight 66 #判断要定义实例方法还是静态方法,同样要方法是否涉及每个实例,这里每个老虎叫都只减少自己的体重,多以用实例方法 67 def roar(self): 68 print('我是老虎,wow!!体重减5斤') 69 self.tweight -= 5 70 def feed(self,food): 71 if food=='meat': 72 self.tweight += 10 73 print('恭喜,虎虎喂食正确,体重加10斤!') 74 else: 75 self.tweight -= 10 76 print('阿欧,喂食失误,体重减十斤!') 77 class Sheep: 78 def __init__(self,weight): 79 self.sweight=weight 80 def sroar(self): 81 print('我是羊,mei~~,体重减5') 82 self.sweight-=5 83 def sfeed(self): 84 if sfood=='grass': 85 self.tweight+=10 86 print('恭喜,喂食正确,体重加10斤!') 87 else: 88 self.tweight-=10 89 print('阿欧,喂食失误,体重减十斤!') 90 class Room: #房间类 91 #创建编号以及里面的动物 92 def __init__(self,inNumber,inAnimal): 93 self.num=inNumber 94 self.ani=inAnimal 95 t1=Tiger(200) 96 print(t1.tweight) #打印得200 97 t1.roar() #叫了一声,打印得:195 98 t1.feed('meat') #喂食正确+10,打印得:205 99 print(t1.tweight) #打印得我是老虎,wow!!体重减5斤/n195 100 # s1=Sheep(100) 101 # print(s1.sweight) #打印得:100 102 # s1.sroar() 103 # print(s1.sweight) #打印得:我是羊,mei~~,体重减5/n95 104 #创建房间的实例 105 ##r1=Room(1,'tiger') #这里的老虎还不会吃不会叫,得传实例t1进去赋予tiger生命 106 r1=Room(1,t1) #这里是把Tiger的一个实例当做参数传进来了,对象的组合 107 #敲门操作: 108 r1.ani.roar() 109 #喂食操作: 110 r1.ani.feed('meat') 111 112 # 3- 对象的组合: 113 ''' 114 现实世界里面的对象 115 大对象里面有小对象 116 房间对象:老虎和羊 117 通过对象的属性表示这种组合关系的 118 在类定义的初始化函数里面,表示对象的组合关系 119 class Room: 120 def__init__(self): 121 self.num = 1 122 self.animal=Tiger(200) 123 游戏的扩展内容: 124 *游戏初始化房间的动物是随机分配的,如何获取随机数? 125 from random import randit 126 print(randit(0,1)) 127 print(randit(1,10)) 128 *游戏限时两分钟 129 ---如何获取当前的系统时间? 130 import time 131 curTime=time.time() 132 ''' 133 # -----------初始化是个房间实例-------- 134 from random import randint 135 print(randint(0,1)) 136 137 # roomList[] #定义一个空列表,用于存放后面的遍历操作 138 # for one in range(1,11):#房间编号是1-10 139 # if randint(0,1)==0: #定义在0和1中各取两个值,各占概率百分之五十 140 # animal==Tiger(200) #定义百分之五十的概率是Tiger类 141 # else: 142 # animal==Sheep(100) #定义百分之五十的概率是Sheep类 143 # room=Room(one,animal) #因为每次for循环遍历之后都会重置, 144 # roomList.append(room) #所以要不遍历结果增加到前面定义的空列表保存起来 145 146 ''' 147 这里采用循环体内加上游戏的完整逻辑,因为循环次数不确定,用while循环 148 import time 149 开始时间 = time.time() 单位是秒,现在到1970年的一个秒数 150 while True: 151 当前时间 = time.time() 152 if 当前时间-开始时间 > 120: 153 break 154 #游戏的一次完整的逻辑 155 156 157 代码自己课后完善 158 '''