Zhang's Wikipedia

玩就玩大的

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

注意区分当前的 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
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanchunhui/article/details/52381784
个人分类: python OOP
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭