关闭

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

标签: 面向对象superpython2python3
425人阅读 评论(0) 收藏 举报
分类:

注意区分当前的 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
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2670487次
    • 积分:63666
    • 等级:
    • 排名:第37名
    • 原创:3990篇
    • 转载:37篇
    • 译文:1篇
    • 评论:158条
    博客专栏
    文章分类
    我的微博
    最新评论