1 什么是继承
继承就是可以让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。
继承就是可以获取另外一个类中的静态属性和普通方法。(并非所有方法)
在Python中,新建的类可以继承一个或者多个父类,父类又称为基类或超类,新建的类称为派生类或子类
注意 python中的继承分为单继承和多继承
2 继承中的子类和父类的概念
父类:用于被继承的类,称之为父类,也叫做基类,或者超类
子类:继承其他类的类,称之为子类 也叫做派生类
3继承的作用
提高代码的重用率
练习1 创建Dog类和Cat类
class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('吃。。。')
def sleep(self):
print('睡。。。')
def look_door(self):
print('能看门')
class Cat:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('吃。。。')
def sleep(self):
print('睡。。。')
def climb(self):
print('会爬树')
以上代码dog类 和cat 类的方法是一模一样的 所以可以建立一个父类 实现代码重用
class Pet:
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('吃。。。')
def sleep(self):
print('睡。。。')
class Dog(Pet):
def look_door(self):
print('能看门')
class Cat(Pet):
def climb(self):
print('会爬树')
dog = Dog('京东狗', 8)
dog.eat()
dog.sleep()
dog.look_door()
print(dog)
cat = Cat('天猫', 10)
cat.eat()
cat.sleep()
cat.climb()
以上两段代码的效果一致,明显下面的更加简洁
4 查看继承的父类
格式 : 类名.__bases__
注意:
(1).python3中如果一个类没有继承任何类,默认继承object类。我们管这种类叫做新式类。
(2).object类,是python中的祖宗,所有的类都是从object类中继承下来的。
练习 查看 Cat Pet两个的父类
"""
练习一中的代码
"""
print(Cat.__bases__)
print(Pet.__bases__)
"""
(<class '__main__.Pet'>,)
(<class 'object'>,)
"""
5 方法的复写
子类中定义了和父类相同的方法,我们叫做方法的复写(派生方法)
实例对象调用此方法的时候再回调用自己类中的方法了
什么时候使用方法的复写
当父类的方法不能满足子类的需求时,就可以使用方法的复写
例
class Person(object):
def eat(self):
print('吃饭。。。')
class Student(Person):
def eat(self):
print('去食堂吃饭')
class Boss(Person):
def eat(self):
print('去酒店吃饭')
student = Student()
student.eat()
boss = Boss()
boss.eat()
"""
去食堂吃饭
去酒店吃饭
"""
6super() 方法
当子类和父类有相同的方法的时候,子类会默认调用自己的方法,而不能使用父类的方法
如果想使用父类的方法 我们就可以使用super()方法来调用父类的方法
1 super(类名,对象名).方法( )既可以在类的内部也可以在类的外部使用
2 父类类名.方法名(self) ----->Pet.eat(self)既可以在内部也可以在外部使用
3 super().eat() --->>只ongoing能在类的内部使用
class Pet(object):
def eat(self):
print('吃...')
def sleep(self):
print('睡觉')
class Dog(Pet):
def look_house(self):
print('看大门...')
def eat(self):
# super().eat() # 调用的是父类的eat()方法。只能在类的内部
# Pet.eat(self) # 父类类名.方法名(self) 可以写到外部
print('吃狗粮...')
dog = Dog()
# Pet.eat(dog)
super(Dog, dog).eat() # super(类名,对象名).方法() 也可用到内部
dog.eat()