Day 7 类、对象与魔法方法

类和对象

练习一
以下类定义中哪些是类属性,哪些是实例属性?

class C:
    num = 0    #类
    def __init__(self):
        self.x = 4 #实例
        self.y = 5 #实例
        C.count = 6 #类

练习二
怎么定义私有⽅法?

函数名前加上“__”两个下划线

练习三
尝试执行以下代码,并解释错误原因:

class C:
    def myFun():
        print('Hello!')
    c = C()
    c.myFun()

改正

class C:
    def myFun(self):
        print('Hello!')
c = C()
c.myFun()

练习四
按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。

  • 平日票价100元
  • 周末票价为平日的120%
  • 儿童票半价
class Ticket:
    def __init__(self, workday = True, adult = True):
        self.price = 100
        if workday:
            self.ratio = 1
        else:
            self.ratio = 1.2
        if adult:
            self.discount = 1
        else:
            self.discount = 0.5

    def get_price(self, num):
        return self.price * self.ratio * self.discount * num

adult1 = Ticket(True, True)
child1 = Ticket(True, False)
print("2个成人+1个小孩平日票价为%.2f" %(adult1.get_price(2) + child1.get_price(1)))

魔法方法

练习二
利用python做一个简单的定时器类

  • 定制一个计时器的类。
  • start和stop方法代表启动计时和停止计时。
  • 假设计时器对象t1,print(t1)和直接调用t1均显示结果。
  • 当计时器未启动或已经停止计时时,调用stop方法会给予温馨的提示。
  • 两个计时器对象可以进行相加:t1+t2。
  • 只能使用提供的有限资源完成。
import time as t
class MyTimer:
    def __init__(self):
        self.unit = ['年','月','天','小时','分钟','秒']
        self.prompt = "未开始计时"
        self.lasted = []
        self.begin = 0
        self.end = 0
    def start(self):
        self.begin = t.localtime()
        self.prompt = "提示:请先调用stop开始计时"
        print("计时开始......")
    def stop(self):
        if not self.begin:
            print("提示:请先调用start()开始计时")
        else:
            self.end = t.localtime()
            self._calc()
            print("计时结束")
    def _calc(self):
        self.lasted = []
        self.prompt = "总共运行了"
        for index in range(6):
            self.lasted.append(self.end[index] - self.begin[index])
            if self.lasted[index]:
                self.prompt += (str(self.lasted[index]) + self.unit[index])
        self.begin = 0
        self.end = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值