20 面向对象4: 方法的继承,重写,私有属性,私有方法
class Animal: def eat(self): print("eat") def __sleep(self): # __开头的方法是私有的,不能在类定义外面使用,不能被子类调用,但是可以在父类公有方法中调用私有属性或方法,子类就可以间接调用这些私有属性或方法 print("sleep")
def __init__(self):
self.__age=5 #__开头的属性是私有的,不能在类定义外面使用 class Dog(Animal): #Dog 类继承Animal类的全部属性和方法,也有eat() ,__sleep() ,age def bark(self): #定义一个Dog 才有的Bark属性 print("bark bark ") class SingleDog(Dog): def bark(self): #对bark 属性进行重写,不再有父类的bark方法 print("sing sing") class GodDog(Dog): def fly(self): print("fly") def bark(self): #对bark 属性进行重写, 保留有父类的bark方法 super().bark() # 调用父类的方法
Dog.bark(self) # 同上,老版本py调用父类方法
print("ying ying ") #同时,追加其他的操作
dog=Dog() dog.bark() print("-"*50) single_dog=SingleDog() single_dog.bark() print("-"*50) goddog=GodDog() goddog.bark() man=Animal()
# __开头的属性和方法是私有的,不能在类定义外面使用,报错!! #man.__sleep()
#py 没有严格的私有,可以通过如下方法调用私有属性和方法,不推荐 man._Animal__sleep()