继承
1.什么是继承
让子类直接拥有父类的属性和方法的过程就是继承
父类 - 被继承者(又叫超类)
子类 - 继承者
2.怎么继承
class 类名(父类1,父类2…):
类的说明文档
类的内容
class 类型(object) - 默认情况下,定义的类继承自object
class Person:
num = 61
def __init__(self):
self.name = '小明'
self.age = 18
self.gender = '男'
self.__sex = '女'
def eat(self):
print(f'{self.name}在吃饭')
@classmethod
def show_num(cls):
print(f'人类的数量:{cls.num}')
@staticmethod
def func1():
print('人类破坏环境')
class Student(Person):
pass
print(Student.num)
stu = Student()
stu.eat()
Student.show_num()
Student.func1()
print(stu.__dict__)
3.在子类中添加内容
1)在子类中添加类属性和方法
类属性和方法的添加不会因为继承而受到任何影响
2) 添加对象属性
对象属性继承的时候init方法被继承,简介继承了对象属性
在子类的init方法中,通过super()去调用父类的init方法
类中方法的调用过程:
通过类或者对象调用方法的时候,会先看当前类中有没有这个方法,如果有就直接调用自己类中的方法,如果没有就看父类中有没有定义这个方法,如果父类定义了,就调用父类的,父类没有定义,就看父类的父类有没有定义,以此类推,如果都没有,就会报错(多态)
class Teacher(Person):
title = '老师'
def __init__(self):
# 调用父类的init方法
super().__init__()
self.school = '四中'
self.subject = '化学'
self.tea_id = '001'
def attend_class(self):
print('老师上课')
def eat(self):
super().eat()
print(f'老师在吃饭')
print(Teacher.num,Teacher.title)
t1 = Teacher()
t1.attend_class()
多继承
class Animal:
def __init__(self,age,gender):
self.age = age
self.gender = gender
def eat(self):
print('在吃饭')
class Fly:
name = '飞行器'
def __init__(self,height,time):
self.height = height
self.time = time
def stop(self):
self.height = 0
print('停止飞行')
class Bird(Animal,Fly):
name = '飞行器'
pass
# def __init__(self,height,time):
# self.height =
b1 = Bird(2,'雌鸟')
# 两个父类属性都可以继承
print(Bird.name)
print(Fly.name)
# 对象属性只会继承第一个父类的属性
print(b1.age,b1.gender)
# print(b1.height,bi.time)
b1.eat()
b1.stop()
# 面试题
class A:
def show(self):
print('A')
class B(A):
def show(self):
super().show()
print('B')
class C(A):
def show(self):
super().show()
print('C')
class D(B,C):
def show(self):
super().show()
print('D')
d = D()
c = C()
d.show() # ACBD
c.show() # AC
# G E F B C D A
print('=============================================')
class A:
def show(self):
print('A')
class B(A):
def show(self):
super().show()
print('B')
class C(A):
def show(self):
super().show()
print('C')
class D(A):
def show(self):
super().show()
print('D')
class E(B,C):
def show(self):
super().show()
print('E')
class F(C,D):
def show(self):
super().show()
print('F')
class G(E,F):
def show(self):
super().show()
print('G')
g = G()
g.show()
F = F()
F.show()
'''
super的用法
super(类,对象) - (对象必须是类的对象,获取指定类的父类,类默认指向当前类)
'''
class A:
def show(self):
print('A')
class B(A):
def show(self):
super().show()
print('B')
class C(B):
def show(self):
super().show()
super(C,self).show()
super(B,B()).show()
print('C')