第20节课:面向对象进阶

  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 '''
原文地址:https://www.cnblogs.com/66-liu/p/14059282.html