学习Python的第十五&六天

Day15&16 :魔法方法

魔法方法总是被双下划线包围,例如__init__
魔法方法是面向对象的 Python 的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的 Python 的强大
魔法方法的“魔力”体现在它们总能够在适当的时候被自动调用

构造方法

  • _init_(self[,…])

类的初始化方法

class Rectangle:
	def __init__(self,x,y):
		slef.x=x
		slef.y=y
	def getPeri(self):
		return(self.x+self.y)*2
	def getArea(self):
		return self.x*self.y
rect=Rectangle(3,4)
def getPeri()#14
def getPeri()#12
		
  • _new_(cls[,…])

对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给 init

class CapStr(str):
	def __new__(cls,string):
		string=string.upper()
		return str.__new__(cls,string)
a=CapStr('I love Python!')
a#I LOVE PYTHON!		
  • _del_(self)

del 是对象的销毁器,但是需要注意的是,当Python解释器退出但对象仍然存活的时候, del 并不会 执行

class C:
	def __init__(self):
		print('我是init,我被调用了。。。')
	def __del__(self):
		print('我是del,我被调用了。。。')
c1=C()	
#我是init,我被调用了。。。
c2 = c1
c3 = c2
del c3
del c2
del c1
#我是del,我被调用了。。

在这里插入图片描述

简单定制

"""制作一个简单计时器"""
import time as t
class MyTimer():
    #开始计时
    def start(self):
        self.start=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)

属性访问

函数描述
_getattr_(self, name)定义当用户试图获取一个不存在的属性时的行为
_getattribute_(self, name)定义当该类的属性被访问时的行为
_setattr_(self, name, value)定义当一个属性被设置时的行为
_delattr_(self, name)定义当一个属性被删除时的行为

描述符

描述符就是将某种特殊类型的类的实例指派给另一个类的属性

函数描述
_get_(self, instance, owner)用于访问属性,它返回属性的值
_set_(self, instance, value)将在属性分配操作中调用,不返回任何内容
_del_(self, instance)控制删除操作,不返回任何内容

定制序列

  • 如果说你希望定制的容器是不可变的话,你只需要定义_len_()和_getitem_()方法。
  • 如果你希望定制的容器是可变的话,除了_len_()和_getitem_()方法,你还需要定义_setitem_()和_delitem_()两个方法。
    在这里插入图片描述

迭代器

  • 迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。
  • 迭代器是一个可以记住遍历的位置的对象。
  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
  • 迭代器只能往前不会后退。
  • 字符串,列表或元组对象都可用于创建迭代器

常见迭代器

for i in 'Python':
	print(i)
#P
#y
#t
#h
#o
#n

iter()

  • _iter_()
  • 用来生成迭代器

next()

  • _next_()
  • 返回迭代器的下一个项目
string='Python'
it=iter(string)
next(it)
'P'
next(it)
'y'
next(it)
't'
next(it)
'h'
next(it)
'o'
next(it)
'n'
#继续使用next会报错
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值