第037讲: 类和对象:面向对象编程 | 学习记录(小甲鱼零基础入门学习Python)

(标答出处: 鱼C论坛)
《零基础入门学习Python》

测试题:
在这里插入图片描述
答:体现了面向对象的多态性的特征
在这里插入图片描述
答:使用类的继承,用一个新类继承这个旧类,然后进行少量的修改就行了
在这里插入图片描述
答:绑定方法,有了这个参数,python再也不会分不清楚是哪个对象在调用方法,可以认为方法中的self就是实例对象的唯一标志
在这里插入图片描述
答:使用创建类的私有成员,具体方法是,在属性或方法前加上两个下划线‘__’,如需调用可以在类中写一个函数来获取,或者使用’_类名__属性名’ 来引用,例:
在这里插入图片描述
在这里插入图片描述
答:_init__方法会在类实例化时自动调用,成为魔法方法,可以重写方法,为对象指定初始方案
在这里插入图片描述
答:类、类对象、实例对象十三个不同的名词。

我们常说的类指的是类定义,由于“python无处不对象”,所以当类定义完之后,自然就是类对象。这个时候可 以对类的属性(变量)进行直接访问(MyClass.name)。

一个类可以实例化出无数的实例对象,python为了区分到底是哪个实例对象调用了方法,所以必须要求方案要绑定(通过self参数)对象才能调用,而为实例化的类对象直接调用方法,因为缺少self参数,就会报错。
在这里插入图片描述

class calctickets() :
    def __init__ (self ,weekend = False , child = False) :
        self.price = 100 
        if weekend == True :
            self.inc = 1.2
        else :
            self.inc = 1
        if child == True :
            self.discount = 0.5
        else :
            self.discount = 1
    
    def calcprice (self ,num) :
        return self.price * self.inc *self.discount * num

adult = calctickets()
child = calctickets(child=True)
weekend_adult = calctickets(weekend=True)
weekend_child = calctickets(weekend=True,child=True)
print ("2个成人 + 1个小孩周末票价:%.2f " %(weekend_adult.calcprice(2) + weekend_child.calcprice(1)) )
print ("2个成人 + 1个小孩平日票价:%.2f " %(adult.calcprice(2) + child.calcprice(1)) )

运行结果:
在这里插入图片描述
在这里插入图片描述

import random as r

legal_x = [0,10]
legal_y = [0,10]

class Turtle :
    def __init__ (self) :
        #初始体力
        self.life = 100
        #初始位置随机
        self.x = r.randint(legal_x[0],legal_x[1])
        self.y = r.randint(legal_y[0],legal_y[1])
    
    def move (self) :
        #随机计算方向并移动到新位置(x,y)
        new_x = self.x + r.choice([1,2,-1,-2])
        new_y = self.y + r.choice([1,2,-1,-2])
        #检查是否超出x和y边界,超出向反方向移动
        if new_x < legal_x[0] :
            self.x = legal_x[0] - (new_x -legal_x[0])
        elif new_x > legal_x[1] :
            self.x = legal_x[1] - (new_x - legal_x[1])
        else :
            self.x = new_x
        if  new_y < legal_y[0] :
            self.y = legal_y[0] - (new_y - legal_y[0])
        elif new_y > legal_y[1] :
            self.y = legal_y[0] - (new_y - legal_y[1])
        else :
            self.y = new_y
        #体力减少
        self.life = self.life - 1
        #返回新位置
        return (self.x , self.y)
    
    def eat (self) :
        #吃鱼体力恢复20
        self.life = self.life + 20
        #上限为100
        if self.life > 100 :
            self.life = 100
    
class Fish :
    def __init__ (self) :
        #类似于龟的初始位置随机
        self.x = r.randint (legal_x[0],legal_x[1])
        self.y = r.randint (legal_x[0],legal_y[1])

    def move (self):
        #随机方向移动
        new_x = self.x + r.choice([1,2,-1,-2])
        new_y = self.y + r.choice([1,2,-1,-2])
        #判断鱼的x,y坐标是否超出边界
        if new_x < legal_x[0] :
            self.x = legal_x[0] - (new_x - legal_x[0])
        elif new_x > legal_x[1] :
            self.x = legal_x[1] - (new_x - legal_x[1])
        else :
            self.x = new_x 
        if new_y < legal_y[0] :
            self.y = legal_y[0] - (new_y - legal_y[0])
        elif new_y > legal_x[1] :
            self.y = legal_y[1] - (new_y - legal_y[1])
        else :
            self.y = new_y
        #返回新的位置
        return (self.x , self.y) 
    
turtle = Turtle ()
fish = []
for i in range (10) :
    new_fish = Fish()
    fish.append(new_fish)

while True :
    if len(fish) == 0 : 
        print ("鱼被吃光啦^_^!\n游戏结束……")
        break
    if turtle.life == 0: #if 
        print ("龟体力耗尽了啦T_T!\n游戏结束……")
        break   
    position=turtle.move()
    for each_fish in fish[:] :
        if each_fish.move()==position:
            #鱼儿被吃掉
            turtle.eat()
            fish.remove(each_fish)
            print("有一条鱼被吃了……")

运行结果:
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38970783/article/details/86651121