#作业
类与对象
- 类属性:num=0
实例属性:self.x=4 self.y=5 C.count=6 - 在变量名或者函数名前加上两个下划线(__),这个函数或者变量就会变成私有
- 修改完的程序:
class C:
def myFun(self):
print('Hello!')
c=C()
c.myFun()
class Ticket:
def __init__(self,p=100, tp=0):
self.price = p
self.total_price = tp
def cost(self):
day = int(input("您想要购买哪天的票?请输入正整数1-7:"))
adult = int(input("请输入需要购买大人的票数(张):"))
child = int(input("请输入需要购买儿童的票数(张):"))
if day in range(1, 6):
self.total_price= adult * self.price + child * self.price * 0.5
print('总票价为:',self.total_price)
elif day in range(6, 8):
self.total_price = adult * self.price * 1.2 + child * self.price * 1.2 * 0.5
print('总票价为:',self.total_price)
m=Ticket()
m.cost()
结果:
>>>
=============== RESTART: D:\BaiduNetdiskDownload\python3\练习.py ===============
您想要购买哪天的票?请输入正整数1-7:1
请输入需要购买大人的票数(张):2
请输入需要购买儿童的票数(张):1
总票价为: 250.0
>>>
=============== RESTART: D:\BaiduNetdiskDownload\python3\练习.py ===============
您想要购买哪天的票?请输入正整数1-7:7
请输入需要购买大人的票数(张):2
请输入需要购买儿童的票数(张):1
总票价为: 300.0
魔法方法
- new:
new 是在一个对象实例化的时候所调用的第一个方法,在调用 init 初始化前,先调用 new 。
new 至少要有一个参数 cls ,代表要实例化的类,此参数在实例化时由 Python 解释器自动提供,后面的参数直接传递给 init 。
new 对当前类进行了实例化,并将实例返回,传给 init 的 self 。但是,执行了 new ,并不一定会进入 init ,只有 new 返回了,当前类 cls 的实例,当前类的 init 才会进入。
若 new 没有正确返回当前类 cls 的实例,那 init 是不会被调用的,即使是父类的实例也不行,将
没有 init 被调用
init:
init(self[, …]) 构造器,当一个实例被创建的时候调用的初始化方法
str:
str(self) :
当你打印一个对象的时候,触发 str
当你使用 %s 格式化的时候,触发 str
str 强转数据类型的时候,触发 str
str(self) 的返回结果可读性强。也就是说, str 的意义是得到便于人们阅读的信息
repr:
repr(self):
有 str 的时候执行 str ,没有实现 str 的时候,执行 repr
repr(obj) 内置函数对应的结果是 repr 的返回值
当你使用 %r 格式化的时候 触发 repr
repr(self) 的返回结果应更准确。怎么说, repr 存在的目的在于调试,便于开发者使用
getitem:
getitem(self, key) 定义获取容器中元素的行为,相当于 self[key]
setitem:
setitem(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value - 程序:
import time
class Timer():
def __init__(self):
print()
self.info = '未开始计时!'
self.begin = None
self.end = None
self.time = 0
def __str__(self):
return self.info
def start(self):
print('计时开始')
self.begin = time.localtime()
def stop(self):
if not self.begin:
print('提示:请先调用start()开始计时!')
return
self.end = time.localtime()
self.time = time.mktime(self.end) - time.mktime(self.begin)
self.info = '共运行了%d秒' % self.time
print('计时结束!')
self.begin = None
return self.time
def show(self):
print(self.info)
def __add__(self, other):
return '共运行了%d秒' % (other.time + self.time)
t1=Timer()
print(t1)
t1.show()
t1.stop()
t1.start()
time.sleep(1)
t1.stop()
print(t1)
t1.stop()
t2=Timer()
print(t2)
t2.start()
time.sleep(3)
t2.stop()
print(t2)
print(t1+t2)
结果:
>>>
=============== RESTART: D:\BaiduNetdiskDownload\python3\练习.py ===============
未开始计时!
未开始计时!
提示:请先调用start()开始计时!
计时开始
计时结束!
共运行了1秒
提示:请先调用start()开始计时!
未开始计时!
计时开始
计时结束!
共运行了3秒
共运行了4秒