继承

继承

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值