继承

一个类可以派生出一个子类,这个子类可以使用父类的属性及方法,也可以在父类的基础上添加自己的独特属性或方法。属性和方法的继承的顺序是先从自己开始,找不到再去找父类,父类没有再找父类的父类,其尽头就是顶级基类object,它就相当于一个人的祖宗。当一个类没有写继承谁时,默认就是继承object。

class father(object):
def __init__(self):
self.name = "wang"
self.__age = 20
def A(self):
print(self.__age)
class son(father):
pass
a = son()
print(a.name)
a.A()
wang
20

上面代码中,son类继承了father类,所以可以直接使用父类的属性和方法。

多继承

一个类可以同时继承多个类,这个就是类的多继承。当继承多个父类时,如果父类中有相同的方法,那么子类会优先使用最先被继承的方法。下面的例子可以明显地看出来。

class father():
def __init__(self):
self.name = "wang"
self.__age = 20
def A(self):
print("this is father\'s method") class mother():
def __init__(self):
self.sex = "man"
def A(self):
print("this is mother\'s method")
class son(father,mother):
pass a = son()
a.A()
this is father's method

当子类不想调用父类的方法,可以通过重写来覆盖父类的方法。

class father():
def __init__(self):
self.name = "wang"
self.__age = 20
def A(self):
print("this is father\'s method") class mother():
def __init__(self):
self.sex = "man"
def A(self):
print("this is mother\'s method")
class son(father,mother):
def A(self):
print("this is my method") a = son()
a.A()
this is my method

当子类重写父类方法后,若想再次调用父类方法,可以使用super()方法。还可以调用类的__mro__属性(返回元组)mro方法(返回列表)来获取类的继承关系。

class father():
def __init__(self):
self.name = "wang"
self.__age = 20
def A(self):
print("this is father\'s method") class mother():
def __init__(self):
self.sex = "man"
def A(self):
print("this is mother\'s method")
class son(father,mother):
def A(self):
super().A() a = son()
a.A()
print(son.mro())
print(son.__mro__)
this is father's method
[<class '__main__.son'>, <class '__main__.father'>, <class '__main__.mother'>, <class 'object'>]
(<class '__main__.son'>, <class '__main__.father'>, <class '__main__.mother'>, <class 'object'>)

魔术方法

类的魔术方法有很多,所谓的魔术方法就是不需要自己调用,就可以自己再特定的时刻被自动调用,魔术方法的形式时__name__()。最常见的魔术方法就是初始化和析构了,下面介绍几种另外的魔术方法。

运算方法:运算方法可以实现类之间的运算,方便类之间的操作。

  1. __add__(self,other) #x + y
  2. __sub__(self,other)#x - y
  3. __mul__(self,other)#x * y
  4. __mod__(self,other)#x % y
  5. __iadd__(self,other)# x += y
  6. __isub__(self,other)# x -= y
  7. __radd__(self,other)#y + x
  8. __rsub__(self,other)#y - x
  9. __imul__(self,other)#x *= y
  10. __imod__(self,other)#x %= y
class A():
def __init__(self):
self.number = 20
def __add__(self,other):
return self.number + other.number
def __sub__(self,other):
return self.number - other.number
class B():
def __init__(self):
self.number = 30 a = A()
b = B()
print (a+b)
print (a-b)
50
-10

__call__方法:正常情况下,实例是不能像函数一样被调用的,但通过写__call__方法就能做到。

class A():
def __init__(self):
self.number = 20
def __call__(self):
print("this call method")
a = A()
a()
this call method

类中一些查询相关信息的方法,这些方法基本了解就行,实际中并不常用。

  • __class__  格式:实例.__class__
  • __dict__     格式:实例.__dict__
  • __doc__     格式:类名.__doc__
  • __bases__  格式:类名.__bases__
  • __mro__     格式:子类名.__mro__

 

class father():
def __init__(self):
self.name = "wang"
self.__age = 20
def A(self):
print("this is father\'s method") class mother():
def __init__(self):
self.sex = "man"
def A(self):
print("this is mother\'s method")
class son(father,mother):
def A(self):
super().A() a = son()
print (a.__class__)#查看类名
print (a.__dict__)#查看全部属性,返回属性和属性值键值对形式
print (son.__doc__)#查看对象文档
print (son.__bases__)#查看父类
print (son.__mro__)
<class '__main__.son'>
{'name': 'wang', '_father__age': 20}
None
(<class '__main__.father'>, <class '__main__.mother'>)
(<class '__main__.son'>, <class '__main__.father'>, <class '__main__.mother'>, <class 'object'>)

python类的继承、多继承及其常用魔术方法的更多相关文章

  1. Python中的常用魔术方法介绍

    1.__init__ 初始化魔术方法 触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中) 参数:至少有一个self,接收对象 返回值:无 作用:初始化对象的成员 注意:使用该方式初 ...

  2. python常用魔术方法概览

    构造和初始化 __init__(self, args) 构造函数 __new__(cls) 传入的是类实例 __del__(self) 析构函数,调用 del cls 时会被调用 属性访问控制 __g ...

  3. [Python3 填坑] 014 类的常用魔术方法举例

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 __init__() 2.2 __new__() 2.3 __call__() 2.4 __str__() 2.5 __repr__() ...

  4. php中的常用魔术方法总结

    以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...

  5. python类学习以及mro--多继承属性查找机制

    版权声明:本文为博主原创文章,未经博主允许不得转载. 还记得什么是新式类和旧式类吗? Python中,一个class继承于object,或其bases class里面任意一个继承于object,这个c ...

  6. Python面向对象5:类的常用魔术方法

    魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹 - 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例 ...

  7. 简述 Python 类中的 __init__、__new__、__call__ 方法

    任何事物都有一个从创建,被使用,再到消亡的过程,在程序语言面向对象编程模型中,对象也有相似的命运:创建.初始化.使用.垃圾回收,不同的阶段由不同的方法(角色)负责执行. 定义一个类时,大家用得最多的就 ...

  8. Python 基础之面向对象之常用魔术方法

    一.__init__魔术属性 触发时机:实例化对象,初始化的时候触发功能:为对象添加成员,用来做初始化的参数:参数不固定,至少一个self参数返回值:无 1.基本用法 #例:class MyClass ...

  9. 第8.12节 Python类中使用__dict__定义实例变量和方法

    上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...

随机推荐

  1. zookeeper 安装及集群

    一.zookeeper介绍 zookeeper是一个中间件,为分布式系统提供协调服务,可以为大数据服务,也可以为java服务. 分布式系统,很多计算机组成一个整体,作为一个整体一致对外并处理同一请求, ...

  2. 屏幕切换 onStart() onStop() onRestart() onDestroy()

    android:configChanges="orientation|keyboardHidden|screenSize"          //xml文件<activity ...

  3. BZOJ:2244: [SDOI2011]拦截导弹

    问题: printf("%.5f ",0):为什么错了? 注意: 初始值很重要 题解: 三维偏序问题: 记录从前往后最长上升子序列长度pref,条数preg 从后往前suff,su ...

  4. Nginx负载均衡(转发)

    http://www.cnblogs.com/jalja/p/6117881.html 一.反向代理 正向代理: 客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就 ...

  5. MD5碰撞和MD5值(哈希值)相等

    md5的碰撞 0e开头的md5和原值: s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974 ...

  6. Sqlserver 增删改查----删

    --我们就以院系,班级,学生来举例. create TABLE [dbo].YuanXi ( Id ,) NOT NULL,--学校id 自增量 YuanXiName varchar() null, ...

  7. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring目录结构和基础JAR包介绍

    可以通过网址 http://repo.spring.io/simple/libs-release-local/org/springframework/spring/ 下载名称为 springframe ...

  8. Java并发基础类AbstractQueuedSynchronizer的实现原理简介

    1.引子 Lock接口的主要实现类ReentrantLock 内部主要是利用一个Sync类型的成员变量sync来委托Lock锁接口的实现,而Sync继承于AbstractQueuedSynchroni ...

  9. zookeeper基础教程

    一.关于zookeeper Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用 ...

  10. CodeForces - 748D Santa Claus and a Palindrome (贪心+构造)

    题意:给定k个长度为n的字符串,每个字符串有一个魅力值ai,在k个字符串中选取字符串组成回文串,使得组成的回文串魅力值最大. 分析: 1.若某字符串不是回文串a,但有与之对称的串b,将串a和串b所有的 ...