Python 在使用超级函数时,我在这段简单的代码中遇到了错误

Python 在使用超级函数时,我在这段简单的代码中遇到了错误,python,python-3.x,class,oop,Python,Python 3.x,Class,Oop,我尝试过稍微修改一下代码,但没有成功。 这是代码 等级车: 定义初始(自我、型号、名称、年份): self.name=name self.model=model self.year=年 self.Class='normal' 自动里程表=0 def描述性_名称(自身): 返回f'{self.year}{self.name}{self.model}' def类型(自身): 返回自我类 def里程表读数(自身): 回程自动里程表 类别电池: 定义初始化(自): 自身容量='75 kwh' def g

我尝试过稍微修改一下代码,但没有成功。 这是代码

等级车:
定义初始(自我、型号、名称、年份):
self.name=name
self.model=model
self.year=年
self.Class='normal'
自动里程表=0
def描述性_名称(自身):
返回f'{self.year}{self.name}{self.model}'
def类型(自身):
返回自我类
def里程表读数(自身):
回程自动里程表
类别电池:
定义初始化(自):
自身容量='75 kwh'
def get_容量(自身):
返回自我能力
电动汽车等级:
定义初始(自我、型号、名称、年份):
超级(汽车())。_初始(型号、名称、年份)
self.battery=battery()
self.Class='电动汽车'
def my_battrey(自我):
返回自我。电池。获取容量()
上面的代码与下面的代码位于同一目录中。 将上面的代码命名为main.py,并在同一目录中的新文件中编写下面的代码,然后尝试运行它

import main
my_scorpio=main.Car('s','scorpio',2019)
print(my_scorpio.descriptive_name())
print(my_scorpio.odometer_reading())
print(my_scorpio.type())
my_tesla=main.Electric_car('s','Tesla',2019)
print(my_tesla.descriptive_name())
print(my_tesla.odometer_reading)
print(my_tesla.type())
print(my_tesla.my_battrey())
class电动汽车:
定义初始(自我、型号、名称、年份):
超级(汽车())。_初始(型号、名称、年份)
从你的标题我猜这就是当前的问题

在python中,您必须明确表示ElectricCar使用此语法继承自Car

class电动汽车(car):
定义初始(自我、型号、名称、年份):
#这将为您提供绑定的超级对象
#从继承车>电动车
超级(汽车,自我)。\uuuu初始(型号,名称,年份)
然后使用
super(Car,self)
将知道在继承树中查找的位置

正如评论中所指出的,您也可以选择超级(电动汽车,自我),因为
isinstance(自我,电动汽车)

此处的错误不是通过指定 电动汽车是汽车的一个子类,因此你不能得到它 远

如果没有继承位,
isinstance(self,Car)
将作为 self属于
电动汽车
类型,它不继承自
汽车

我真的建议您阅读文档,因为它解释了您使用它时发生的事情

class电动汽车:
定义初始(自我、型号、名称、年份):
超级(汽车())。_初始(型号、名称、年份)
从你的标题我猜这就是当前的问题

在python中,您必须明确表示ElectricCar使用此语法继承自Car

class电动汽车(car):
定义初始(自我、型号、名称、年份):
#这将为您提供绑定的超级对象
#从继承车>电动车
超级(汽车,自我)。\uuuu初始(型号,名称,年份)
然后使用
super(Car,self)
将知道在继承树中查找的位置

正如评论中所指出的,您也可以选择超级(电动汽车,自我),因为
isinstance(自我,电动汽车)

此处的错误不是通过指定 电动汽车是汽车的一个子类,因此你不能得到它 远

如果没有继承位,
isinstance(self,Car)
将作为 self属于
电动汽车
类型,它不继承自
汽车

我真的建议您阅读文档,因为它解释了您使用它时发生的事情

调用super的正确方式(老式)是:

super(Electric_car, self).__init__(model,name,year)
或者简单地(在Python 3.x中):

调用super的正确方法(旧式)是:

super(Electric_car, self).__init__(model,name,year)
或者简单地(在Python 3.x中):


那么问题到底是什么呢?继承使用:
ClassName(InheritedClass):
然后使用
super()
你也可以使用:
InheritedClass.\uuuuu(self,attributes)
如果你使用
super
你应该有一个超类。
class电动汽车(car):
(我想把它改名为
class ElectricCar(Car):
)+
super()。\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
如果你使用
super
你应该有一个超类。
class电动车(car):
(我将它重命名为
class电动车(car):
)+
super()。\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
是的,您是对的。使用两个参数调用super也可以像这样工作。
super(type,obj)
每当
isinstace(obj,type)时返回绑定的super对象
因此,正如任何电动汽车都是电动汽车的一个实例一样,它也可以工作。因为我们想使用父方法,我们也可以将汽车放在那里,因为它满足
isinstance(self,Car)
是因为继承。如果你把
放进去,它是有效的,但不会运行
车。
方法。它将按照继承顺序从
运行下一个类,在这种情况下,它是
对象
并且是禁止操作的。它不是
超级(电动汽车,自我).\uu init(…)
?在python3中,您可以省略类型并使用
super()。\uuu init\uuu(…)
是的,您是正确的。使用两个参数调用super也可以这样工作。
super(type,obj)
出现时返回绑定的超级对象(obj,type)
因此,任何电动汽车都是电动汽车的一个实例,它会工作。因为我们想使用父方法,我们也可以将汽车放在那里,因为它满足
isinstance(self,Car)
的继承性。如果你将
Car
放在里面,它是有效的,但不会运行
汽车。\uu init\uu
方法。它将在里面运行下一个类