• 【转】python 调用super()初始化报错“TypeError: super() takes at least 1 argument”


    一、实验环境

    1.Windows7x64_SP1

    2.Anaconda2.5.0 + python2.7(anaconda集成,不需单独安装)

    二、实验步骤

    2.1 在python中有如下代码:

    class father():
      def __init__(self,age):
        self.age = age;
      def get_age(self):
        print(self.age);
    
    class son(father):
      def __init__(self,age):
        super().__init__(age);
        self.toy_number = 5;
      def get_toy_number(self):
        print(self.toy_number);
    
    myson = son(6)
    myson.get_age()
    myson.get_toy_number()

    运行时报错:“TypeError: super() takes at least 1 argument(0 given)”

    2.2 原因分析

    该方法调用super()为在python3中的方法,而此是在python2中运行的,在python3中运行将正常。

    在《python编程:从入门到实践》一书中介绍了若想在python2中运行需将 

    super().__init__(age)

    一句改为:

    super(son, self).__init__(age)

    但我按此方法改后,运行时报错:“TypeError: super() argument 1 must be type, not classobj”

    2.3 解决方式

    上网查询资料后,得知若想要在python2中运行成功,可以改为如下两种方法:

    方法一

    class father(object):
      def __init__(self,age):
        self.age = age;
      def get_age(self):
        print(self.age);
    
    class son(father):
      def __init__(self,age):
        super(son, self).__init__(age);
        self.toy_number = 5;
      def get_toy_number(self):
        print(self.toy_number);
    
    myson = son(6)
    myson.get_age()
    myson.get_toy_number()

    方法二

    class father():
      def __init__(self,age):
        self.age = age;
      def get_age(self):
        print(self.age);
    
    class son(father):
      def __init__(self,age):
        father.__init__(self,age);#注意此处参数含self
        self.toy_number = 5;
      def get_toy_number(self):
        print(self.toy_number);
    
    myson = son(6)
    myson.get_age()
    myson.get_toy_number()

    运行后都将得到正确答案:

    参考链接:https://stackoverflow.com/questions/9698614/super-raises-typeerror-must-be-type-not-classobj-for-new-style-class
    原文请参考:https://blog.csdn.net/u010812071/article/details/76038833

  • 相关阅读:
    Java 日期字符串与日期类型转换
    Android 开发笔记“关闭默认键盘”
    MySql 日期转字符串
    Android 开发笔记“调用.net webservice遇到的问题”
    远程连接MySQL 不允许
    未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
    Android 开发笔记“浅谈DDMS视图”
    Android 开发笔记“Eclipse 调试和快捷键”
    Android 开发笔记“程序安装包APK的制作”
    第四周进度条
  • 原文地址:https://www.cnblogs.com/hester/p/11311208.html
Copyright © 2020-2023  润新知