欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 23:05:06
...

Python学习Task07:类、对象与魔法方法
Python学习Task07:类、对象与魔法方法
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)))

Python学习Task07:类、对象与魔法方法
答:
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