python之面向对象
1 #类 :一类具体相同特征的事务的统称 2 # 关键字 class 类名 #类 通常首字母大写 3 # class Tiger:#如果没有继承可以写冒号,不写括号 4 # pass 5 # 6 # #实例: 1.实例是在这个类里实际存在的个体 2.实例是类的具体实例化体现 7 # class Tiger: 8 # nickName = '老虎' #属性 9 # 10 # t1 = Tiger() #t1 就是Tiger里的实例,使用t1变量,方便后续使用 11 12 ''' 13 要求大家用面向对象的设计编写一个python程序,实现一个文字游戏系统。 14 动物园里面有10个房间,房间号从1 到 10。 15 每个房间里面可能是体重200斤的老虎或者体重100斤的羊。 16 游戏开始后,系统随机在10个房间中放入老虎或者羊。 17 然后随机给出房间号,要求游戏者选择敲门还是喂食。 18 如果选择喂食: 19 喂老虎应该输入单词 meat,喂羊应该输入单词 grass 20 喂对了,体重加10斤。 喂错了,体重减少10斤 21 如果选择敲门: 22 敲房间的门,里面的动物会叫,老虎叫会显示 ‘Wow !!’,羊叫会显示 ‘mie~~’。 动物每叫一次体重减5斤。 23 游戏者强记每个房间的动物是什么,以便不需要敲门就可以喂正确的食物。 24 游戏3分钟结束后,显示每个房间的动物和它们的体重。 25 实现过程中,有什么问题,请通过课堂上讲解的调试方法,尽量自己发现错误原因。 26 ''' 27 #对象的方法 : 28 # 1、通过定义在类里面的函数 29 # 2、实例方法:每个具体实例相关的方法 30 # 3、静态方法:共有的方法,与每个具体实例无关 31 32 #游戏 33 #1、找出游戏中的对象 34 # *找出这些类具有的特征和行为(属性) 35 #1.老虎:特征(本质:变量,术语:属性) 36 # 叫声,体重,高矮胖瘦 37 # 2.行为:本质就是类里面的一个函数 术语:方法 38 # 1、吃肉 39 # 2、叫声 40 41 #2、找出对象直接的关系--组网 42 #游戏食物的由input输入的,游戏玩家也是input交互的 43 44 #定义类 45 class Tiger001: 46 nickName = '老虎' #静态属性,这个属性是属于整个类的,所有的这类的实例都是一样的 47 __name = 'xx' #私有的 -- 继承中使用,子类不能使用 48 #实例属性,属于实例的,有个初始化方法,:__init__ 49 def __init__(self,inweight): #只要调用构造方法,就会自动调用 __init__ ;self:谁调用就是谁的,自动调用 50 # print("我执行了",self,inweight) 51 self.weight = inweight #对象.属性 self等于任何一个实例 52 # 实例方法-和实例有关,看这个方法有没有涉及到实例属性:例如老虎叫 ,减5斤,不可能一只老虎叫,所有老虎减5斤 53 def roar(self): 54 print('我是老虎,wow,体重减少5斤') 55 self.weight -=5 56 # 静态方法:大家都一样 57 def feed(self,food): 58 if food == '肉': 59 print('喂食正确,体重加10斤') 60 self.weight += 10 61 else: 62 print('喂食错误,体重减10斤') 63 self.weight -= 10 64 65 class Sheep001: 66 nickName = '羊' # 静态属性,这个属性是属于整个类的,所有的这类的实例都是一样的 67 __name = 'xx' # 私有的 -- 继承中使用,子类不能使用 68 69 # 实例属性,属于实例的,有个初始化方法,:__init__ 70 def __init__(self, inweight): # 只要调用构造方法,就会自动调用 __init__ ;self:谁调用就是谁的,自动调用 71 # print("我执行了",self,inweight) 72 self.weight = inweight # 对象.属性 self等于任何一个实例 73 # 实例方法-和实例有关,看这个方法有没有涉及到实例属性:例如老虎叫 ,减5斤,不可能一只老虎叫,所有老虎减5斤 74 75 def roar(self): 76 print('我是羊,mie,体重减少5斤') 77 self.weight -= 5 78 # 静态方法:大家都一样 79 80 def feed(self, food): 81 if food == '草': 82 print('喂食正确,体重加10斤') 83 self.weight += 10 84 else: 85 print('喂食错误,体重减10斤') 86 self.weight -= 10 87 #静态方法 ,大家都一样 88 @staticmethod #这个修饰符只能修饰紧跟的一个方法 89 90 def test(): 91 print('我是静态方法') 92 #实例方法必须只能实例调用,否则报错 93 #静态属性,实例可以调用,类也可以调用,类也可以 类名.静态属性 = 新值 94 #实例化 95 # t1 = Tiger(200) #t1 就是Tiger里的实例,使用t1变量,方便后续使用 96 # # print(t1.weight) 97 # t2 = Tiger(100) 98 # t2.roar() 99 # t2.feed('草') 100 # print(t2.weight) 101 # t2 = Tiger() #t2 就是Tiger里的实例,使用t2变量,方便后续使用 102 # print(t2.nickName) 103 104 #对象的组合 :对象里面有对象 :房间 里面有老虎或者羊 105 class Room: 106 pass 107 class Room: 108 #属性:编号 109 def __init__(self,inNum,inAnimal): 110 self.Num = inNum 111 self.Animl = inAnimal 112 #方法: 113 #定义一个房间实例,编号为2,里面有老虎 114 t1 = Tiger001(200) 115 r1 = Room(2,t1) 116 #房间的动物叫一声, 房间实例.动物.叫 117 r1.Animl.roar() 118 print(r1.Animl.weight) 119 120 #随机数,导入随机模块 121 from random import randint 122 print(randint(0,2)) #0,1,2 左含右也含 123 #老虎和羊取得概率都是 50% ,所以设置0,1就行 124 125 #————————房间初始化—————————————————— 126 #定义个变量存房间 127 roomList = [] 128 for one in range(1,11): 129 if randint(0, 1) == 1: 130 ani = Tiger001(200) 131 else: 132 ani = Sheep001(100) 133 room = Room(one,ani) 134 roomList.append(room) 135 #——————————————————————————————————— 136 137 import time 138 #开始时间: = time.time() #单位是s 139 #当前时间:=time.time() 140 # while True: 141 # if 当前时间-开始时间 > 120: 142 # break 143 144 #对象的继承:减少代码量 145 #子类继承父类: 146 # 如果子类没有def __init__ 就会自动调用父类的 def __init__ 147 # 如果子类有def __init__ 需要手动调用父类的 def __init__ 148 149 #写个华南虎的类,可以继承上面老虎的类 150 class souTiger(Tiger001): #如果多个父类 class souTiger(Tiger,Room): 151 def __init__(self,inWeight): 152 # 手动调用 153 Tiger001.__init__(self, inWeight) # super.__init__(self,inWeight)
154 #方法重写 155 def roar(self): 156 print('子类的方法重写') 157 a1 = souTiger(200) 158 print(a1.weight) 159 160 161 162 #方法重写 ,方法在不同的子类或父类的表现
#类方法
@classmethod
def tell(cls):
pass