python 面向对象,多继承,类有关的几个函数,类的特殊方法

多继承:

  python的类可以有两个以上父类,也即有类A,类B,类C。C同时继承类A与类B,此时C中可以使用A与B中的属性与

方法。那么问题来了,如果A与B中具有相同名字的方法,这个时候python怎么调用的会是哪个方法呢?  

  若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清

  多继承顺序。(mro 解析顺序)

  继承树:print(D.__mro__) 输出D的继承顺序

      

      super()里面传入参数可以指定继承谁的方法,注意self不能少;

      这里的super(A,self).play()是继承的在继承数中A的下一个类的play方法。这里

      super(A,self).play()指的是B的play方法;

  子类调用父类的__init__方法:

  

 

 

 

    

 

和类有关的几个函数

  hasattr()      判断对象object是否包含名为name的特性

  getattr()       得到对象的某个属性值 (获取器)    调用函数返回内存地址,加括号就可以直接执行

           不存在就报错,调用属性就返回属性的值

            getattr(t, 'a', 'not find') 第三个报错的内容,即t这个对象里没有属性a

  setattr()     给对象添加某个属性值 (设置器 )

         属性不存在就添加,属性存在就修改,可以用dir()查看是否添加了属性

         对一个实例设置,其他实例不会改变。如果设置类属性,则实例都会变。

  delattr()        删除对象属性 (删除器)

         类属性只能用类删除,实例属性只能用实例删除

  isinstance()       检查对象是否是类的对象,返回True或False

  issubclass()      检查一个类是否是另一个类的子类。返回True或False

 

#类属性:
  __dict__      # 类的属性(包含一个字典,由类的数据属性组成)
  __doc__      # 类的文档字符串
#类方法:
  __init__      # 初始化
  __repr__      # 直接返回这个对象 repr() 函数就是调用对象的这个方法
  __str__      # print(obj) 如果类里面定义了__repr__,没有定义__str__ print(obj)也会返回__repr__的内容,或者说__repr__的优先级更高
  __call__      # Obj() 使实例可被调用

#运算符方法
  __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

#讲魔法方法,主要是为了让大家,了解python面向对象的设计模式,并不是让你们实现每一个魔法方法。

posted @ 2018-01-18 19:03  巴蜀秀才  阅读(177)  评论(0编辑  收藏  举报