TypeError:super()至少需要1个参数[Python 3]

时间:2016-08-21 01:39:40

标签: python python-3.x

在下面的代码中,虽然我重新检查了15分钟以上,但我仍然遇到了同样的错误。对于您的信息,我在sublime文本和错误:

上运行它
  

TypeError:super()至少需要1个参数(0给定)

代码如下所示:

class Car():
"""A simple attempt to represent a car."""

    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        print("This car has " + str(self.odometer_reading) + " miles on it.")

    def update_odometer(self, mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")

    def increment_odometer(self, miles):
        self.odometer_reading += miles

class ElectricCar(Car):
    """Represent aspects of a car, specific to electric vehicles."""

    def __init__(self, make, model, year):
        """Initialize attributes of the parent class."""
        super().__init__(make, model, year)

my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())

1 个答案:

答案 0 :(得分:3)

这里的问题是StackOverflow上相当well documented的问题。但我会解释你如何错误地使用super()。在尝试使用super()时,您正在使用名为Old Style classes的内容。 新样式类继承自object,可用于 Python 2.2 及更高版本( Python 3专门使用新样式类)。

您的Car课程声明应如下所示 - > class Car(object):Car 继承自 object 内置),您的super调用具有该类object在,并且self作为参数传入:

super(ElectricCar, self).__init__(make, model, year)

现在,如果我们打印,对象my_tesla的类型是:

>>> print type(my_tesla)
<class '__main__.ElectricCar'>    

我们可以看到它的类型为ElectricCar

现在为什么这一切都很重要?那么风格之间有一些关键的区别。在旧样式中,它为实例化定义的类和对象是不同的类型。在旧样式类中,实例始终为instance类型,无论其类如何。对于新样式类,实例通常将共享与其类相同的类型。例子:

旧式 - &gt;

>>> class MyClass:
    pass
>>> print type(MyClass)
>>> print type(MyClass())
<type 'classobj'>
<type 'instance'>

新款式 - &gt;

>>> class MyClass(object):
    pass
>>> print type(MyClass)
>>> print type(MyClass())
<type 'type'>
<class '__main__.MyClass'>

请参阅super()上的Python官方文档。