2020.7.18 python 魔法方法(p46-49)

1 getattr(self,name)
定义当用户试图获取一个不存在的属性时的行为
getattr【被访问的属性不存在时】自动调用的魔法方法

2 getattribute(self,name)
对于python来说,属性或者函数都可以被理解成一个属性,且可以通过__getattribute__获取
getattribute#【属性在被访问时】自动调用的魔法方法

3 setattr(self,name,value)
4 delattr(self,name)

>>> class C:
	def __getattribute__(self,name):
		print('getattribute')
		return super().__getattribute__(name)
	#super会自动获取基类的属性,他这里没有所以会获取object
	def __getattr__(self,name):
		print('getattr')
	def __setattr__(self,name,value):
		print('setattr')
		super().__setattr__(name,value)
	def __delattr__(self,name):
		print('delattr')
		super().__delattr__(name)

		
>>> c=C()
>>> c.x
getattribute
getattr
>>> c.x=1
setattr
>>> del c.x
delattr

描述符:就是将某种特殊类型的类的实例指派给另一个类的属性
1 get(self,instance,owner)
用于访问属性,返回属性的值
2 set(self,instance,value)
在属性分配操作中调用,不返回任何内容
3 delete(self,instance)
控制删除操作

协议protocols
协议类似某些语言的接口,里面包含的是一些必须要实现的方法
定制容器
(1)如果希望容器不可变(e.g 元组)只需定义:
len(self) 返回容器中元素个数
getitem(self,key) 获取容器中指定元素
(2) 如果希望容器可变
除了__len__()和__getitem__()还需定义:
setitem(self,key,value) 设置容器中指定元素
delitem(self,key) 删除容器中元素

(一个参数加*表示未知个数)

迭代器

1 iter() 将一个可以迭代的对象转为迭代器对象
2 next() 返回迭代器的一个元素,可设置参数变量

>>> string='apple'
>>> it=iter(string)
>>> next(it)
'a'
>>> next(it)
'p'

魔法方法
1.iter()
2. next()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值