new
- 永远是静态方法
- 需要一个返回值,如果返回值不是cls的实例,则不会调用__init__
- 返回值一般是实例对象,需要调用object来实例化对象,则返回值必然是super().new(cls)
str
- 可视化方法,用字符串的可视方式展示,但是本质不是字符串
- str()、format()、print()的三个函数直接调用__str__,如果没有__str__则去调用__repr__
repr
- 可视化方法,对一个对象用字符串可视化方式表达
- 除str()、format()、print()三个方法都直接调用__repr__
如果父类没有,则按照该规则与继承规则往上找
bytes
- 返回一个bytes对象,如果需要bytes返回,则一定要return bytes对象
hash
- 返回一个整数,如果有该方法,则实例就可以哈希
- set去重需要满足两个条件,一是可hash,二是两个值需要内容相等,内容相等则需要调用__eq__方法
- 如果类中没有__eq__方法,则在==比较时默认比较的id值
eq
- 判断两个对象内容是否相等
- 类中有了__eq__,就必须有__hash__定义,否则该类的实例都不可以hash
- list中定义了 def hash(self): return None 所以list不能hash
bool
- 定义实例的bool类型
- 返回值只能是False或者True
- 如果没有定义,则找__len__,非0为真
运算法重载
- 如果没有__isub__则,-=的运算符会找__sub__
__isub__与__sub__的区别
- sub是进行相减并返回了新的值,返回新值后将原值覆盖 类似于
a.attr = a.attr b.attr
- isub是先进行相减,但是最后return了self,但是属性做了变化,类似于
- a.attr = a.attr - b.attr
return self
- list 的+=类似于调用了extend()方法,并作为返回值
- 不可变类型,+=调用的=
enter__与__exit
- with上下文管理器在进入时会调用__enter__方法,执行结束后会执行__exit__方法,with语句块中异常都不会打破__exit__的执行
- with语句会调用__enter__方法,如果有as,将该方法的返回值赋值给as子句的变量
posted @
2020-08-07 21:38
zoer
阅读(
171)
评论()
编辑
收藏
举报