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 '''