Python学习Task07:类、对象与魔法方法

Python学习Task07:类、对象与魔法方法_第1张图片
Python学习Task07:类、对象与魔法方法_第2张图片
Python学习Task07:类、对象与魔法方法_第3张图片

答:
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)))

Python学习Task07:类、对象与魔法方法_第4张图片
答:
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秒'

你可能感兴趣的:(Python学习Task07:类、对象与魔法方法)