|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
class Fater:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "%s的年龄是:%d"%(self.name,self.age)
class Son(Fater):
def __init__(self,name,caleac):
super().__init__(name)
self.caleac = caleac
def __str__(self):
return ":%s,所在大学是%s"%(self.name,self.caleac)
fater = Fater('Tom',50)
print(fater)
son = Son('jake','集美大学')
print(son)
问题1:如果我这里Son类只想继承Fater类的name属性,这样写为什么报错,应该如何写
问题2,:请问为什么我跟着小甲鱼教程里直接写super().__init__(),最终会报错,提示我__init__()内缺少参数
问题3:请简述以下super().__init__()中的具体参数以及如何应用,另外super().是否可以用于继承其他方法(非魔法方法)
首先,你理解错了 super() 的作用,super() 并不是用来继承的,而是帮助子类调用父类的方法的,这在子类需要重写父类的方法时会很有帮助
你想调用父类的初始化方法来给子类初始化 name 属性,但是又不想保留 age 属性,可以这样做,但是这样做的意义不大:
- class Fater:
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __str__(self):
- return "%s的年龄是:%d"%(self.name,self.age)
- class Son(Fater):
- def __init__(self,name,caleac):
- super().__init__(name, None)
- self.__dict__ = { k: v for k, v in self.__dict__.items() if v != None }
- self.caleac = caleac
- def __str__(self):
- return ":%s,所在大学是%s"%(self.name,self.caleac)
- fater = Fater('Tom',50)
- print(fater)
- son = Son('jake','集美大学')
- print(son)
复制代码
|
|