zoukankan      html  css  js  c++  java
  • 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
     
    
    
  • 相关阅读:
    JVM优化系列之一(-Xss调整Stack Space的大小)
    被kill问题之2:Docker环境下Java应用的JVM设置(容器中的JVM资源该如何被安全的限制)
    docker的坑
    docker容器内存占用 之 系统cache,docker下java的内存该如何配置--temp
    查看docker容器的内存占用
    使用Java监控工具出现 Can't attach to the process
    使用docker查看jvm状态,在docker中使用jmap,jstat
    在Docker中监控Java应用程序的5个方法
    HDU2552 三足鼎立 【数学推理】
    C++面向对象模型
  • 原文地址:https://www.cnblogs.com/zhaobobo001/p/14418413.html
Copyright © 2011-2022 走看看