其他分享
首页 > 其他分享> > 第20节课:面向对象进阶

第20节课:面向对象进阶

作者:互联网

# 第20节课:面向对象--进阶
'''
本节大纲:
1- 实例方法与静态方法
2- 动物园游戏设计
3- 对象组合
复习属性的概念:
属性即特征,分为实例属性和静态属性:
静态属性是指每个实例都共有的属性,比如nickname=人类
实例属性是指不同的类不同的特征,比如每个人的身高体重年龄性别名字都不一样
实例属性是在__init__里面定义的,应为后续的调用很简单,创建实例初始化就会会自动执行
'''
# 1- 对象的方法:
# 概念:通过定义在类里面的函数
# 实例方法:每个具体实例相关的方法===方法的本质是函数
# 静态方法:共有的方法,与每个具体实例无关===方法的本质是函数
# 1-1 实例方法:实例调用的方法
# 2-1 类方法:类去调用的
# class Person:
# nickname = '六六'
# def __init__(self,iname,iage,iweight):#实例方法一定要有实例self
# self.name=iname
# self.age=iage
# self.wei=iweight
# def eat(self): #eat()这个实例去调用了方法,是实例方法
# self.wei+=10
# print('我在吃饭,重了十斤',self.wei)
# #类方法--类去调用的,实例调用也是可以的
# @classmethod #打声招呼,证明要调用类方法了
# def tell(cls): #定义一个类方法,类方法一定要有类cls
# print('这是类方法')
# ll=cls.nickname='暴富' #类和实例调用这个类方法的时候,会把nickname中原本的六六变成暴富
# print(ll)
# #静态方法
# @staticmethod
# def run(): #静态方法的括号中什么都没有,就相当于类当中的普通函数
# print('我是静态方法')
#
# p1 = Person('tom', 23, 180)
# print(p1.nickname) #打印得六六
# p1.eat() #打印得:我在吃饭,重了十斤 190
# Person.tell() #可以用类去调用,打印得:这是类方法/n暴富
# p1.tell() #也可以用实例去调用,打印得:这是类方法/n暴富
# Person.run() #类可以调用静态方法
# p1.run() #实例也可以调用静态方法

# 2- 动物园游戏设计
'''
游戏规则:
1.10个房间,每个里面可能是200斤老虎或者100斤羊
2.游戏开始后,系统随机给出房间号,游戏者喂里面的动物.喂老虎应该输入单词meat,
喂羊应该输入单词grass喂对了,体重加10斤。喂错了,体重减少10斤
3.敲房间的门,里面的动物会叫,老虎叫声音是‘Wow !!’,羊叫声是‘mie~~’。
动物每叫一次体重减5斤。。
4.游戏者强记每个房间的动物是什么,以便不需要敲门就可以喂正确的食物。
5.游戏2分钟结束后,看看你喂的动物总体重是多少

解读编程思路,定义三个类,分别是老虎,羊,房间.喂的操作用import

'''
class Tiger:
nickName='老虎'
#判断应该定义什么实例属性还是静态属性,就看这个属性是否和每个个体有关,这里每只老虎的体重都不一样,所有要定义实例属性
def __init__(self,weight):
self.tweight=weight
#判断要定义实例方法还是静态方法,同样要方法是否涉及每个实例,这里每个老虎叫都只减少自己的体重,多以用实例方法
def roar(self):
print('我是老虎,wow!!体重减5斤')
self.tweight -= 5
def feed(self,food):
if food=='meat':
self.tweight += 10
print('恭喜,虎虎喂食正确,体重加10斤!')
else:
self.tweight -= 10
print('阿欧,喂食失误,体重减十斤!')
class Sheep:
def __init__(self,weight):
self.sweight=weight
def sroar(self):
print('我是羊,mei~~,体重减5')
self.sweight-=5
def sfeed(self):
if sfood=='grass':
self.tweight+=10
print('恭喜,喂食正确,体重加10斤!')
else:
self.tweight-=10
print('阿欧,喂食失误,体重减十斤!')
class Room: #房间类
#创建编号以及里面的动物
def __init__(self,inNumber,inAnimal):
self.num=inNumber
self.ani=inAnimal
t1=Tiger(200)
print(t1.tweight) #打印得200
t1.roar() #叫了一声,打印得:195
t1.feed('meat') #喂食正确+10,打印得:205
print(t1.tweight) #打印得我是老虎,wow!!体重减5斤/n195
# s1=Sheep(100)
# print(s1.sweight) #打印得:100
# s1.sroar()
# print(s1.sweight) #打印得:我是羊,mei~~,体重减5/n95
#创建房间的实例
##r1=Room(1,'tiger') #这里的老虎还不会吃不会叫,得传实例t1进去赋予tiger生命
r1=Room(1,t1) #这里是把Tiger的一个实例当做参数传进来了,对象的组合
#敲门操作:
r1.ani.roar()
#喂食操作:
r1.ani.feed('meat')

# 3- 对象的组合:
'''
现实世界里面的对象
大对象里面有小对象
房间对象:老虎和羊
通过对象的属性表示这种组合关系的
在类定义的初始化函数里面,表示对象的组合关系
class Room:
def__init__(self):
self.num = 1
self.animal=Tiger(200)
游戏的扩展内容:
*游戏初始化房间的动物是随机分配的,如何获取随机数?
from random import randit
print(randit(0,1))
print(randit(1,10))
*游戏限时两分钟
---如何获取当前的系统时间?
import time
curTime=time.time()
'''
# -----------初始化是个房间实例--------
from random import randint
print(randint(0,1))

# roomList[] #定义一个空列表,用于存放后面的遍历操作
# for one in range(1,11):#房间编号是1-10
# if randint(0,1)==0: #定义在0和1中各取两个值,各占概率百分之五十
# animal==Tiger(200) #定义百分之五十的概率是Tiger类
# else:
# animal==Sheep(100) #定义百分之五十的概率是Sheep类
# room=Room(one,animal) #因为每次for循环遍历之后都会重置,
# roomList.append(room) #所以要不遍历结果增加到前面定义的空列表保存起来

'''
这里采用循环体内加上游戏的完整逻辑,因为循环次数不确定,用while循环
import time
开始时间 = time.time() 单位是秒,现在到1970年的一个秒数
while True:
当前时间 = time.time()
if 当前时间-开始时间 > 120:
break
#游戏的一次完整的逻辑


代码自己课后完善
'''

标签:__,10,20,进阶,self,实例,print,节课,def
来源: https://www.cnblogs.com/66-liu/p/14059282.html