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

Posted hester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转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

以上是关于转python 调用super()初始化报错“TypeError: super() takes at least 1 argument”的主要内容,如果未能解决你的问题,请参考以下文章

(转)Python: super 没那么简单

面向对象super内置函数(转)

Python进阶-继承中的MRO与super

super.init() 无法在 swift3 中调用

python中super()方法的解释

Flutter initState 初始化调用 Provide报错