Python 面向对象 —— super 的使用(Python 2.x vs Python 3.x)

原创 2016年08月31日 09:30:31

注意区分当前的 Python 版本是 2.X 还是 3.X,Python 3.X 在 super 的使用上较之 Python 2.X 有较大的变化;

1. Python 2.x

class Contact(object):
    all_contacts = []
    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

class Friend(Contact):
    def __init__(self, name, email, phone):
        super(Friend, self).__init__(name, email)
        self.phone = phone

Python 2.x 的环境下,对于需要被继承的父类,需要显式地将父类继承自 object 类,否则在子类使用 super(子类, self).__init__() 时会报 TypeError: must be type, not classobj.

这是因为 Python 2.x 中:

>> class A():
       pass
>> type(A)
classobj

>> class A(object):
       pass
>> type(A)
type

而且 Python 2.x 也并不将 classobj 视为 type.

当然子类中使用这样的语句也是可以的:

class Friend(Contact):
    def __init__(self, name, email, phone):
        Contact.__init__(self, name, email, phone)
        self.phone = phone

python super()用法遇到TypeError: must be type, not classobj

2. Python 3.x

class Contact:
    all_contacts = []
    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

class Friend(Contact):
    def __init__(self, name, email, phone):
        super().__init__(name, email)
        self.phone = phone
版权声明:本文为博主原创文章,未经博主允许不得转载。

python的super详解(二)

转自http://gohom.win/2016/02/23/py-super/ 在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简单说, super函...
  • langb2014
  • langb2014
  • 2017年01月31日 21:04
  • 4947

关于Python的super用法研究

一、问题的发现与提出  在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A:  def __init__(s...
  • JohnsonGuo
  • JohnsonGuo
  • 2006年01月20日 20:40
  • 63590

python的super详解(一)

一直对super很模糊,先看看一篇最详细的super解释。 If you aren’t wowed by Python’s super() builtin, chances are you don...
  • langb2014
  • langb2014
  • 2017年01月31日 20:47
  • 2046

python中super用法研究

python语言与C++有相似的类继承,在类定义时,python中会自定义第一个self,类似C++中this指针,指向对象自身。 python简单的类举例: >>> class hello(obje...
  • u011467044
  • u011467044
  • 2016年08月14日 21:06
  • 5384

python2.x 3.x的super关键字使用示例

super在单继承中使用的例子: class Foo(): def __init__(self, frob, frotz) self.frobnicate = frob ...
  • u013636377
  • u013636377
  • 2016年05月09日 14:51
  • 668

Python 中的继承之Super用法

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图...
  • fenglovehappy
  • fenglovehappy
  • 2015年08月17日 19:54
  • 4631

Python中super()函数简介及用法分享

首先看一下super()函数的定义: super([type [,object-or-type]]) Return a **proxy object** that delegates method...
  • zzsfqiuyigui
  • zzsfqiuyigui
  • 2017年03月12日 22:58
  • 958

Python2.7中的super方法浅见

重写是继承机制中的重要内容,对于构造方法尤为重要。构造方法用来初始化新建对象的状态,大多数子类不仅要有自己的初始化代码,还要拥有超类的初始化代码。 如果一个类的构造方法被重写,那么就需要调用超类的...
  • m0_37310097
  • m0_37310097
  • 2017年07月18日 14:57
  • 496

在CentOS7下同时安装、使用Python2.x和Python3.x

一般情况下,各类Linux操作系统是会默认安装Python2.x的,在最新的CentOS7.4版本中,发现系统默认只安装了Python2.x,而且是很多系统组件的依赖包,不推荐卸载。目前Python3...
  • solaraceboy
  • solaraceboy
  • 2017年11月16日 14:48
  • 68

python中super用法研究

python语言与C++有相似的类继承,在类定义时,python中会自定义第一个self,类似C++中this指针,指向对象自身。 python简单的类举例: >>> class hello(obje...
  • u011467044
  • u011467044
  • 2016年08月14日 21:06
  • 5384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python 面向对象 —— super 的使用(Python 2.x vs Python 3.x)
举报原因:
原因补充:

(最多只允许输入30个字)