Python学习Task07:类、对象与魔法方法
答:
1.num和count是类属性,x和y是实例属性。
2.在Python中定义私有变量只需要在变量名或函数名前加上两个下划线。
3.创建类实例时缩进不正确。
4.
class Ticket():
def __init__(self,weekend=False,child=False):
self.exp=100
if weekend:
self.inc=1.2
else:
self.inc=1
if child:
self.discount=0.5
else:
self.discount=1
def Price(self,num):
return self.exp*self.inc*self.discount*num
adult=Ticket()
child = Ticket(child=True)
print("2个成人 + 1个小孩平日票价为:%d 元" % (adult.Price(2) + child.Price(1)))
答:
1.
(1)new(cls[, …]): 在一个对象实例化的时候所调用的第一个方法,在调用__init__初始化前,先调用__new__,new 至少要有一个参数cls,代表要实例化的类,此参数在实例化时由 Python 解释器自动提供,后面的参数直接传递给__init__。 new 对当前类进行了实例化,并将实例返回,传给__init__的self。但是,执行__new__,并不一定会进入__init__,只有__new__返回了,当前类cls的实例,当前类的__init__才会进入。
(2)init(self[, …]) :构造器,当一个实例被创建的时候调用的初始化方法。
(3)str(self):当打印一个对象的时候,触发__str__,当使用%s格式化的时候,触发__str__,str强转数据类型的时候,触发__str__。
(4)repr(self):repr是str的备胎,有__str__的时候执行__str__,没有实现__str__的时候,执行__repr__,repr(obj)内置函数对应的结果是__repr__的返回值,当使用%r格式化的时候 触发__repr__
(5)getitem(self, key):定义获取容器中元素的行为,相当于self[key]。
(6)setitem(self, key, value):定义设置容器中指定元素的行为,相当于self[key] = value。
import time
class Timer:
start_time = 0
stop_time = 0
#计时器相加
def __add__(self, other):
together = int.__add__(self.secs, other.secs)
return '总共运行了%d秒' % together
def __repr__(self):
ret = getattr(self, 'secs', '未开始计时')
if isinstance(ret, int):
return '总共运行了%d秒' % ret
return ret
#启动计时器
def start(self):
self.start_time = time.time()
print('开始计时!')
#停止计时器
def stop(self):
if self.start_time == 0:
print('请先调用 start() 开始计时!')
else:
self.stop_time = time.time()
self.secs = round(self.stop_time - self.start_time)
a=Timer()
a.start() #开始计时!
a.stop() #总共运行了10秒
b=Timer()
b.start() #开始计时!
b.stop() #总共运行了8秒
a+b #'总共运行了18秒'
上一篇: Task_07类、对象和魔法方法
下一篇: 《 2020年抖音用户画像报告 》