七夕节写那些结伴而行的特殊方法
Posted wwg945
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七夕节写那些结伴而行的特殊方法相关的知识,希望对你有一定的参考价值。
__getattr__和__setattr__
这两个特别简单,__getattr__是通过属性操作符.或者反射getattr(),hasattr()无法获取到指定属性(对象,类,父类)的时候,该方法被调用
__setattr__则是设置属性的时候被调用
class A: def __getattr__(self, item): print(‘%s找不到这个属性‘%item) def __setattr__(self, instance, value): print(‘设置了%s == %s‘%(instance,value)) a = A() a.aa # aa找不到这个属性 hasattr(a,‘bb‘) # bb找不到这个属性 a.aa = ‘a‘ # 设置了aa == a setattr(a,‘bb‘,‘bb‘) # 设置了bb == bb
与他相关的一个方法__getattribute__,尝试获取属性时总会调用这个方法(特殊属性或特殊方法除外),当该方法抛出AttributeError时才会调用__getattr__方法.
class A: def __getattr__(self, item): print(‘%s找不到这个属性‘%item) def __setattr__(self, instance, value): print(‘设置了%s == %s‘%(instance,value)) def __getattribute__(self, item): return 1 a = A() print(a.aa) # 1 print(hasattr(a,‘bb‘)) #True a.aa = ‘a‘ # 设置了aa == a setattr(a,‘bb‘,‘bb‘) # 设置了bb == bb
__getitem__和__setitem__
对象使用[]时调用的方法, 这里主要说一下切片的原理.
关键字存在一个slice(), 其实这是一个类
print(slice) # <class ‘slice‘> print(dir(slice)) # [‘__class__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, # ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__le__‘, ‘__lt__‘, # ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, # ‘__str__‘, ‘__subclasshook__‘, ‘indices‘, ‘start‘, ‘step‘, ‘stop‘]
其中indices方法可以根据序列长度修改切片信息,返回一个由起始位置,结束位置,步幅组成的元组.
print(slice(0,10,2).indices(6)) # (0, 6, 2) print(slice(-3).indices(6)) # (0, 3, 1)
以上是关于七夕节写那些结伴而行的特殊方法的主要内容,如果未能解决你的问题,请参考以下文章