# 1.建立一个类 class Bird: def __init__(self): self.hungry =True def eat(self): if self.hungry: print("Ahhhhh") self.hungry=False else: print("No Thanks.") #实例化. b= Bird() #调用方法.打印的结果为:Ahhhhh b.eat() #再一次调用eat方法.打印结果:No Thanks. b.eat()
#2. 建立一个子类. class SongBird(Bird): def __init__(self): self.sound ="Squawk!" def sing(self): print(self.sound) #实例化 sb =SongBird() #调用方法,打印结果为:Squawk! sb.sing() #调用eat方法,报错. sb.eat() #为何报错, SongBird 没有属性Hungry ,SongBird重写了构造函数,可是新的构造函数没有任何初始化属性hungry. # 解决办法1.调用未关联的超类构造函数 # 2. 使用super方法.
#3. 子类的解决办法: class SongBird(Bird): def __init__(self): # Bird.__init__(self) #1. 调用超类构造函数. super().__init__() #2. 经过super方法调用. self.sound= "squawk!" def sing(self): print(self.sound) sb =SongBird() sb.sing() #squawk! sb.eat() #Ahhhhh sb.eat() #No Thanks.