忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 2686 | 回复: 6

super() 继承__init__() 已解决 [复制链接]

招聘 : 质量管理
论坛徽章:
0
发表于 2018-01-11 16:07 |显示全部楼层
本帖最后由 blueskysee 于 2018-01-12 17:38 编辑

谁帮忙看下我这个脚本的问题在哪里?


#!/usr/bin/python

class A():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def hello(self):
        print "My name is %s,%d years old." %(self.name,self.age)


class B(A):
    def __init__(self,name,age,sex):
        super(B,self).__init__(name,age)
        self.sex = sex


b = B('Go',18,'F')

$ python ff.py
Traceback (most recent call last):
  File "ff.py", line 18, in <module>
    b = B('Go',18,'F')
  File "ff.py", line 14, in __init__
    super(B,self).__init__(name,age)
TypeError: super() argument 1 must be type, not classobj


看了这个TypeError, 第一个是type, 怎么转换?

论坛徽章:
130
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2018-01-11 16:21 |显示全部楼层
回复 1# blueskysee

There is no issue in Python 3.6.3

$ python ff.py
My name is Go,18 years old.

$ python -V
Python 3.6.3 :: Anaconda, Inc.

$ cat ff.py
#!/usr/bin/python

class A():
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def hello(self):
        print("My name is {},{} years old.".format(self.name,self.age))


class B(A):
    def __init__(self,name,age,sex):
        super(B,self).__init__(name,age)
        self.sex = sex


b = B('Go',18,'F')
b.hello()

招聘 : 质量管理
论坛徽章:
0
发表于 2018-01-11 16:30 |显示全部楼层
回复 2# jason680

alexwen@BeiJingBS:~$ python2.7 ff.py
Traceback (most recent call last):
  File "ff.py", line 18, in <module>
    b = B('Go',18,'F')
  File "ff.py", line 14, in __init__
    super(B,self).__init__(name,age)
TypeError: super() argument 1 must be type, not classobj

alexwen@BeiJingBS:~$ python3.5 ff.py
My name is Go,18 years old.
alexwen@BeiJingBS:~$

3.5 我也能跑过, 但是2.7没有过...

论坛徽章:
130
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2018-01-11 16:49 |显示全部楼层
回复 3# blueskysee

try this for workaround

$ python3.6 ff.py
My name is Go,18 years old.

$ python2.7 ff.py
Traceback (most recent call last):
  File "ff.py", line 18, in <module>
    b = B('Go',18,'F')
  File "ff.py", line 14, in __init__
    super(B,self).__init__(name,age)
TypeError: super() argument 1 must be type, not classobj

$ python3.6 ff_v2.py
My name is Go,18 years old.

$ python2.7 ff_v2.py
My name is Go,18 years old.

$ diff ff.py ff_v2.py
2a3
> __metaclass__ = type

招聘 : 质量管理
论坛徽章:
0
发表于 2018-01-11 17:12 |显示全部楼层
本帖最后由 blueskysee 于 2018-01-11 17:24 编辑

回复 2# jason680

我3.5 也过了, 2.7不行.

刚刚回复发出去出问题了, 所以就发了一遍.

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2018-01-12 16:20 |显示全部楼层

招聘 : 质量管理
论坛徽章:
0
发表于 2018-01-12 17:37 |显示全部楼层
回复 6# q1208c



Your problem is that class B is not declared as a "new-style" class.  Change it like so:
class A(object):
    ....

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP