[Python学习日记] 魔法方法(二)

本文深入探讨Python的魔法方法,包括简单定制计时器、属性访问的描述符机制、定制序列实现容器类型协议,以及迭代器的iter()和next()方法的使用。通过实例解析,帮助读者更好地理解和应用这些高级特性。
摘要由CSDN通过智能技术生成

目录

简单定制

  • 定制一个计时器
  • start和stop方法代表启动计时和停止计时
  • 假设计时器对象t1,print(t1)和直接调用t1均显示结果
  • 当计时器未启动或已经停止计时,调用stop方法会给予温馨提示
  • 两个计时器对象可以进行相加:t1+t2
  • 只能使用提供的有限资源完成
>>>t1=MyTimer()
>>>t1
未开始计时
>>>t1.stop()
提示:请先调用start()开始计时!
>>>t1.start()
计时开始...
>>>t1.stop()
计时结束!
>>>t1
总共运行了3>>>t2=MyTimer()
>>>t2.start()
计时开始...
>>>t2
总共运行了5>>>t1+t2
总共运行了8>>>class A():
	def _str_(self):
		return "Python"
>>>a=A()
>>>print(a)
Python
>>>a
<_main_.A object at 0x02C409F0>
>>>class B():
	def _repr_(self):
		return "Python"
>>>b=B()
>>>b
Python
import time as t

class MyTime
	def start(self):
		self.start=t.localtime()
		print("计时开始...")
		
	def stop(self):
		self.stop=t.localtime()
		print("计时结束!")

	def _calc(self):
		self.lasted=[]
		self.prompt="总共运行了"
		for index in range(6):
			self.lasted.append(self.stop[index]-self.start[index])
			self.prompt+=str(self.lasted[index])
		print(self.prompt)

属性访问

class C:
	def _init_(self):
		self.x='X-man'

>>>c=C()
>>>c.x
'X-man'
>>>getattr(c,'x','没有属性')
'X-man'
>>>getattr(c,'y','没有属性')
'没有属性'

描述符

  • 描述符就是将某种特殊类型的类的实例指派给另一个类的属性
  • _ get_(self,instance,owner) 用于访问属性,他返回属性的值
  • _ set_(self,instance,owner) 将在属性分配操作中调用,不返回任何内容
  • _ delete_(self,instance) 控制删除操作,不返回任何内容

定制序列

容器类型协议

  • 如果定制容器不可变,只需要定义_ len_()和_ getitem_()方法
  • 如果定制容器可变,除了_len_()()和_ getitem_()方法,还要定义_ setitem()和_ delitem_()两个方法

迭代器

  • iter()
    iter()
    返回迭代器本身
  • next()
    _ next_()
    决定迭代器的规则
>>>class Fibs:
	def _init_(self,n=10):
		self.a=0
		self.b=1
		self.n=n
	def _iter_(self):
		return self
	def _next_(self):
		self.a,self.b=self.b,self.a+self.b
		if self.a>self.n
			raise StopIteration
		return self.a

>>>fibs=Fibs()
>>>for each in fibs:
	print(each)
1
1
2
3
5
8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值