类和对象
练习一
以下类定义中哪些是类属性,哪些是实例属性?
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