出现了 如下的报错,主要是那一句takes 3 positional arguments but 4 were given
经过排查,在写继承类时,写的是 super().__init__(self, 参数,参数)
class IceCream(Restaurant): def __init__(self, restaurant_name, cuisine_type): super().__init__(self,restaurant_name, cuisine_type) self.favors = {'Vanilla', 'Chocolate', 'Green Tea' 'Strawberry'}
这里不应该写self,删除self后程序正常运行。
笔记:在子类的__init__方法中,使用super().__init__创建子类的属性,使得这些参数关联到父类的参数上。
提出问题:super().__init__方法下的参数是以怎样的规则关联到父类的?如果父类的参数名与子类参数名不同,能否进行关联
接下来做实验确认:
父类中:
子类中
定义的实例
运行结果
所以,在定义子类时,是以顺序来关联父类的属性参数的。而在调用子类方法时,参数是直接用的父类参数。
源代码:
class Restaurant(): def __init__(self, restaurant_name, cuisine_type): self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type self.number_served = 0 def describe_restaurant(self): print("The restaurant's name is " + self.restaurant_name ) print("The restaurant's cuisine type is " + self.cuisine_type) def open_restaurant(self): print("The restaurant is opening") def set_number_served(self, number): self.number_served = number print("The restaurant served " + str(restaurant.number_served) + " person") def increment_number_served(self, number): self.number_served += number print("I think this restaurant may can serve " + str(self.number_served) + " person") class IceCream(Restaurant): def __init__(self, restaurant_name, cuisine_type): super().__init__(restaurant_name, cuisine_type) self.favors = {'Vanilla', 'Chocolate', 'Green Tea' 'Strawberry'} def show_icecream(self): print("We provide these Ice cream :") print(self.favors) restaurant = Restaurant('KFC', 'Fry') restaurant.describe_restaurant() restaurant.open_restaurant() restaurant.set_number_served(20) restaurant.increment_number_served(30) IceCreamStand = IceCream('JJ', 'ice') IceCreamStand.show_icecream()
执行结果: