继承:实现代码的重用。相同代码不需要重新进行编写。子类拥有父类的所有属性和方法
语法:class 类名(父类名)
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
class Dog(Animal):
def dark(self):
print("汪汪叫")
wangcai = Dog()
wangcai.eat()
wangcai.drink()
wangcai.dark()
print(wangcai)
输出结果:
吃
喝
汪汪叫
<__main__.Dog object at 0x000001FBCF69AC50>
对父类方法进行扩展:
1.在子类中重写父类方法
2.在需要的位置用super().父类方法来调用父类方法的执。super()调用父类中封装的方法
class Animal:
def eat(self):
print("吃")
def drink(self):
print("喝")
class Dog(Animal):
def bark(self):
print("汪汪叫")
class Xiaotianquan(Dog):
def fly(self):
print("飞")
def bark(self):
#1 针对子类特有需求编写方法
print("嗷嗷叫")
#2 使用super调用原本在父类中的方法
super().bark()
#3 增加子类代码
print("$#%2")
wangcai = Xiaotianquan()
wangcai.eat()
wangcai.drink()
wangcai.bark()
print(wangcai)
输出结果:
吃
喝
嗷嗷叫
汪汪叫
$#%2
<__main__.Xiaotianquan object at 0x000001C56572A2B0>
3.多继承:可以让子类同时具有多个父类属性和方法
语法:class 子类名(父类名1,父类名2…)
class A:
def test1(self):
print("test 方法")
class B:
def demo(self):
print("demo 方法")
class C(A,B):
pass
c=C()
c.test1()
c.demo()
输出结果:
test 方法
demo 方法
多态:不同的子类对象调用相同的父类方法产生不同的结果。多态以继承和重写父类为前提。
class Dog(object):
def __init__(self,name):
self.name = name
def game(self):
print("%s玩球" % self.name)
class Xiaotiandog(Dog):
def game(self):
print("%s在天上玩耍" % self.name)
class Person(object):
def __init__(self,name):
self.name = name
def game_with(self,dog):
print("%s和%s愉快的玩耍" % (self.name,dog.name))
#让狗玩耍
dog.game()
#创建一个狗对象
wangwang = 1.Xiaotiandog("wangwang")2.Dog("wangwang")
#创建小明对象
xiaoming = Person("小明")
#让小明和狗玩
xiaoming.game_with(wangwang)
输出结果:
1.小明和wangwang愉快的玩耍
wangwang在天上玩耍
2.小明和wangwang愉快的玩耍
wangwang玩球
看以观察到1.2会产生不同结果,1用Dog类创建对象,2用Xiaotiandog创建对象,让不同的子类对象调用相同的方法(game()),在执行程序时,调用不同的狗对象实参,产生不同的执行结果。