马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
搞了好久都弄不明白super()要怎么用
class Cat:
def __init__(self):
self.name = "我是一只慵懒的小猫咪"
def display(self):
print(self.name)
class Dog(Cat):
def __init__(self):
self.name = "我是一只很凶的大狼狗"
def display(self):
print(self.name)
class Pig(Dog):
def __init__(self):
self.name = "我是一只很快就会饿的小猪"
def display(self):
print(self.name)
if __name__ == "__main__":
ds = Pig()
ds.display()
super()放在不同位置打印出来不同的结果,请问大佬要在哪个位置放super()函数才会全部打印出来
本帖最后由 Twilight6 于 2020-8-21 12:29 编辑
[b]
直接放 super 只会重复打印三次 ‘我是一只很快就会饿的小猪’ ,因为 name 参数只有在实例化 Pig 类的时候才赋值了,你后续 super 调用父类方法还是打印之前你初始化的 name
参考代码:
class Cat:
def __init__(self):
self.name = "我是一只慵懒的小猫咪"
def display(self):
print(self.name)
class Dog(Cat):
def __init__(self):
self.name = "我是一只很凶的大狼狗"
def display(self):
print(self.name)
super().display()
class Pig(Dog):
def __init__(self):
self.name = "我是一只很快就会饿的小猪"
def display(self):
print(self.name)
super().display()
if __name__ == "__main__":
ds = Pig()
ds.display()
输出结果:我是一只很快就会饿的小猪
我是一只很快就会饿的小猪
我是一只很快就会饿的小猪
而你想打印三个不同的name ,需要先执行 __init__ 重新初始化下 self.name ,参考代码:
class Cat:
def __init__(self):
self.name = "我是一只慵懒的小猫咪"
def display(self):
print(self.name)
class Dog(Cat):
def __init__(self):
self.name = "我是一只很凶的大狼狗"
def display(self):
print(self.name)
super().__init__()
super().display()
class Pig(Dog):
def __init__(self):
self.name = "我是一只很快就会饿的小猪"
def display(self):
print(self.name)
super().__init__()
super().display()
if __name__ == "__main__":
ds = Pig()
ds.display()
输出结果:我是一只很快就会饿的小猪
我是一只很凶的大狼狗
我是一只慵懒的小猫咪
也可以这样调用实例后的对象方法:
class Cat:
def __init__(self):
self.name = "我是一只慵懒的小猫咪"
def display(self):
print(self.name)
class Dog(Cat):
def __init__(self):
self.name = "我是一只很凶的大狼狗"
def display(self):
print(self.name)
Cat().display()
class Pig(Dog):
def __init__(self):
self.name = "我是一只很快就会饿的小猪"
def display(self):
print(self.name)
Dog().display()
if __name__ == "__main__":
ds = Pig()
ds.display()
输出结果:我是一只很快就会饿的小猪
我是一只很凶的大狼狗
我是一只慵懒的小猫咪
[/b]
|