码迷,mamicode.com
首页 > 编程语言 > 详细

python初始化父类错误

时间:2014-06-14 18:23:05      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   color   使用   

源码如下:

#!/usr/bin/env python

class Bird():
        def __init__(self):
                self.hungry = True

        def eat(self):
                if self.hungry:
                        print Aaaah...
                        self.hungry = False
                else:
                        print No, Thanks!


class SongBird(Bird):
        def __init__(self):
                super(SongBird, self).__init__()
       #       Bird.__init__(self)
                self.sound = Squawk!

        def sing(self):
                print self.sound

 

错误信息如下:

>>> from Bird import Bird, SongBird
>>> b = Bird()
>>> b.eat()
Aaaah...
>>> b.eat()
No, Thanks!
>>> sb = SongBird()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Bird.py", line 17, in __init__
    super(SongBird, self).__init__()
TypeError: must be type, not classobj


错误原因:

使用super初始化父类只对父类为新风格(new-style)的生效,对旧风格的不生效。

 

解决方式1:

#!/usr/bin/env python

# 使用new-style
class Bird(object):
        def __init__(self):
                self.hungry = True

        def eat(self):
                if self.hungry:
                        print Aaaah...
                        self.hungry = False
                else:
                        print No, Thanks!


class SongBird(Bird):
        def __init__(self):
                super(SongBird, self).__init__()
                self.sound = Squawk!

        def sing(self):
                print self.sound

 

解决方法2:

#!/usr/bin/env python

__metaclass__ = type

class Bird:
        def __init__(self):
                self.hungry = True

        def eat(self):
                if self.hungry:
                        print Aaaah...
                        self.hungry = False
                else:
                        print No, Thanks!


class SongBird(Bird):
        def __init__(self):
                super(SongBird, self).__init__()
                self.sound = Squawk!

        def sing(self):
                print self.sound

 

解决方法3(使用old-style):

#!/usr/bin/env python

class Bird():
        def __init__(self):
                self.hungry = True

        def eat(self):
                if self.hungry:
                        print Aaaah...
                        self.hungry = False
                else:
                        print No, Thanks!


class SongBird(Bird):
        def __init__(self):
                # 不使用super进行初始化
                Bird.__init__(self)
                self.sound = Squawk!

        def sing(self):
                print self.sound

 

python初始化父类错误,布布扣,bubuko.com

python初始化父类错误

标签:style   class   blog   code   color   使用   

原文地址:http://www.cnblogs.com/imoing/p/3787673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!