在下面的代码中,虽然我重新检查了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())
答案 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官方文档。