继承实现代码的重用,相同的代码不需要重复的编写
多态不同的对象调用相同的方法,产生不同的执行结果增加代码的灵活度
子类拥有父类的所有方法和属性
继承的语法:
class 类名{父类}
pass
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
class Dog(Animal):
def bark(self):
print("狗叫")
wangcai = Dog()
wangcai.eat()
wangcai.drink()
wamhcao.run()
wangcai.bark
继承的专业术语
Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类继承
Dog类是Animal类的派生类,Animal是Dog类的基类,Dog类是Animal类派生
C继承B B继承A ,实际上C是继承了A的
方法的重写子类继承自父类,可以直接享受父类中已经封装好的方法,不需要再次开发
当父类的方法实现不能满足子类需求时,可以对方法进行重写
方法有两种
- 覆盖父类的方法:相当于在子类中定义了一个和父类同名的方法
- 对父类方法进行拓展:在子类中重写父类的方法;在需要的位置使用super(),父类方法 来调用父类方法的执行;代码其他的位置针对子类的需求,编写子类特有的代码实现
关于super()
- 特殊的类
- 就是使用super类创建出来的对象
- 最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
def run(self):
print("跑")
def sleep(self):
print("睡")
class Dog(Animal):
def bark(self):
print("狗叫")
class Xiaotianquan(Dog):
def fly(self):
print("我会飞")
def bark(self):
print("像神一样的在叫")#针对子类特有的需求编写代码
super().bark()#使用super类调用原本在父类中封装的方法
print("!@#!@!@$@!#!@#")#增加其他子类的代码
wangcai = Xiaotianquan()
wangcai.eat()
wangcai.drink()
wangcai.run()
wangcai.bark()
结果:
吃
喝
跑
像神一样的在叫
狗叫
!@#!@!@$@!#!@#
私有属性和私有方法
1.子类对象不能再自己的方法内部,直接访问父类的私有属性或私有方法
2.子类对象可以通过父类的公有方法间接访问到私有属性或私有方法
class A:
def __init__(self):
self.num1 = 100
self.__num2 = 200
def __test(self):
print("私有方法%d %d"%(self.num1,self.__num2))
def test(self):
print("父类的公有方法 %d"% self.__num2)
self.__test()
class B(A):
def demo(self):
#1.在子类的对象方法中,不能访问父类的私有属性
#print("访问父类的私有属性 %d"% self.__num2)
#2.在子类的对象方法中,不能调用父类的私有方法
#self.__test()
#3.在子类的对象方法中,通过父类的公有方法访问到父类的私有属性和私有 方法
self.test()
b = B()
b.demo()
#在外界不能直接访问对象的私有属性/调用私有方法
#print(b,__num2)print(b.__test)都报错
结果:
父类的公有方法 200
私有方法100 200
多继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
语法:class 子类(父类名1,父类名2) pass
在不同的父类中存在 同名的方法, 子类对象 在调用同名方法时,
在开发的时候要避免使用多继承
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)