1.继承
用法:
.在定义类时,可以从已有的类继承,
被继承的类称为基类(父类),新定义的类称为派生类(子类)。
.在类中找不到调用的属性时就搜索基类,
如果基类是从别的类派生而来,这个规则会递归的应用上去。
反过来不行。
.如果派生类中的属性与基类属性重名,那么派生类的属性会覆盖掉基类的属性。
包括初始化函数。
.派生类在初始化函数中需要继承和修改初始化过程,
使用’类名+__init__(arg)’来实现继承和私有特性,也可以使用super()函数。
issubclass(类名1,类名2)
判断类1是否继承了类2
作用:面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
继承完全可以理解成类之间的类型和子类型关系。
子类在重写父类方法之后,如果要继承父类方法中的功能,要先调用父类的方法
class.fun(self)
2.多继承
子类同时继承多个父类。
当继承的类有同种方法的时候,只会继承前面一个的方法
3.类的特殊方法(魔法方法)
类属性:
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
类方法:
__init__ 初始化
__repr__ c1 直接返回这个对象
__str__ print(c1 )如果类里面定义了__repr__,没有定义__str__的话print(x)时也会返回__repr__的内容,或者说__repr__的优先级更高
__call__ c1() 使实例可被调用
运算符方法
__add__(self,other) x+y
__sub__(self,other) x-y
__mul__(self,other) x*y
__mod__(self,other) x%y
__iadd__(self,other) x+=y
__isub__(self,other) x-=y
__radd__(self,other) y+x
__rsub__(self,other) y-x
__imul__(self,other) x*=y
__imod__(self,other) x%=y
__truediv__(self,other) x/y
__floordiv__(self,other) x//y
4.装饰器
装饰器(deco):装饰函数的参数是被装饰的函数对象,返回原函数对象
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
5.类装饰器
@property 装饰过的函数返回的不再是一个函数,而是一个property对象
装饰过后的方法不再是可调用的对象,可以看做数据属性直接访问。
@staticmethod (静态方法)把没有参数的函数装饰过后变成可被实例调用的函数,
函数定义时是没有参数的,可以不接收参数
@classmethod (类方法)把装饰过的方法变成一个classmethod类对象,既能被类调用又能被实例调用。
注意参数是cls代表这个类本身。
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。