魔方方法contains
这个魔法方法为了实现成员的检测
py的魔法方法有很多代偿的实现,比如说迭代,假如没有定义iter和next魔法方法,那么当把对象放到迭代工具中,放到for循环语句中,py找不到iter和next魔法方法,就会尝试查找getitem魔法方法,contains也是有代偿的,如果我们没有实现从contains,但是使用了in和not in进行成员关系的判断,py就会尝试去查找iter和next魔法方法
如果iter和next魔法方法都没有,py还会尝试,getitem魔法方法
如果没有定义bool这个魔法方法,py就会去找有没有存在len这个魔法方法,如果有的话这个魔法方法返回的是非0表示true,否则表示false
如果我们不想让某个魔法方法生效,可以赋值为none
我们没有定义contains魔法方法,他就会找到iter和next魔法方法进行代偿,如果iter和next都没有,它会尝试找getitem
但是我们这里定义了contains赋值给none,就表明了不希望关系判断这种事情出现
魔方方法:
py可以像调用函数一样,调用一个对象,需要这个对象的类去定义一个叫call的魔法方法
str函数是将参数转换为字符串对象 给人看的,repr则将对象转换为程序可执行的字符串给程序看的,这两个魔法方法是返回字符串类型,
eval对字符串去引号,可以说eval函数是repr的反函数
repr这个魔法方法是可以对str这个魔法方法进行代偿的,也就是说我么之定义了repr魔法方法,调用str函数也是可以被响应到的
这个里面我们没有定义str它会自动的去找repr这个魔法方法进行代偿
如果定义的是str,他是不会代偿的
定义repr的功能强大
通过定义两个方法的实现,可以让对象在不同的场景,支持不同的显示效果
模方法法propoerty函数:
用于返回一个property属性对象
_x隐藏变量
利用getattr、 setattr、delattr魔法方法也可以实现类似操作
property函数,优点可以简化代码
装饰器实现的原理,就是通过传入函数参数来实现的,是property经典的应用了
将property函数作为装饰器来使用,会让创建只读属性变的极为简单
e.x是只读的,不能改变值
装饰器就是一个语法糖,将装饰器改为容易理解的样子
我们只赋值了property的第一个参数,实现获取的fget参数,另外两个参数采用默认值none,不支持写入和删除
传另外两个参数,通过:
property属性对象 ,提供了getter、setter、deleter三个方法,对应的是property函数的三个参数接口可以进行这样写
使用装饰器来实现,跟使用getattr、setattr、delattr的效果是一样的
类方法:
通常定义在类里面的方法,类自己是没有办法直接调用它的,需要通过实例对象来操作才行,因为方法需要通过对象来绑定,我们下面讲的类方法转门用于绑定类的方法
需要使用@classmethod
类方法的特点是绑定的是类,而不是实例对象
统计一下这个对象的数量,或者通过创建一个列表来维护一个类对应的所有对象类型的需求,可以通过类方法来现实
在对象中去创建一个跟类属性同名的实例属性,后者就会覆盖类属性,get_count是类方法,所以不小心实例属性覆盖了类属性,问题也不大
静态方法:
静态方法是放在类里面的函数,类里面的函数叫方法,是因为方法需要跟对象进行绑定,函数呢没有绑定的操作,跟普通函数的区别,可以放到类里面,在类里面定义一个不需要绑定的函数
当操作不涉及类属性或者实例属性引用的时候,使用静态方法比较适合,如果想统计实例对象数量这种任务,让类方法实现可能更好
独立一个add类方法,这样的好处是实现了自动化,我们让构造函数去调用add方法,我们不用管他是子类还是父类,谁去掉就会把对应的类传递进去,递增的是该类对应的count属性,这样就可以实现各各类统计各个类实例的对象