Task07:类、对象与魔法方法

练习题

2、怎么定义私有⽅法?
函数名前加上“__”两个下划线,那么这个函数就会为私有的了。
3、尝试执行以下代码,并解释错误原因:

class C:
    def myFun():
        print('Hello!')
    c = C()
    c.myFun()
myFun函数少了self参数。

4、按照以下要求定义一个游乐园门票的类,并尝试计算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)))
   

魔方练习题

2、利用python做一个简单的定时器类

要求:

  • 定制一个计时器的类。
  • startstop方法代表启动计时和停止计时。
  • 假设计时器对象t1print(t1)和直接调用t1均显示结果。
  • 当计时器未启动或已经停止计时时,调用stop方法会给予温馨的提示。
  • 两个计时器对象可以进行相加:t1+t2
  • 只能使用提供的有限资源完成。
import time as t
from time import sleep
class MyTimer():
    def __init__(self):
        self.unit = ['年','月','日','时','分','秒']
        self.prompt = "未开始计时!"
        self.lasted = []
        self.begin = 0
        self.end = 0

    def __str__(self):
        return self.prompt
    __repr__ = __str__

    def __add__(self, other):
        prompt = "总共运行了:"
        result = []
        for index in range(6):
            result.append(self.lasted[index] + other.lasted[index])
            if result[index]:
                prompt += (str(result[index] + self.unit[index]))
        return prompt

    #开始计时
    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])

        print self.prompt
#创建对象
t1 = MyTimer()
t1.start()
sleep(3) #中间等待的时间来验证计时
t1.stop()
posted @ 2020-08-05 21:42  chenweibo  阅读(74)  评论(0编辑  收藏