python 之 继承

1、什么是继承

I、继承是一种创建新类的方式,新建的类可以继承一个或多个父类, 新建的类可称为子类或派生类, 父类又可称为基类或超类, 子类会遗传父类的属性. (减少代码冗余的问题)
II、需要注意的是:
Python支持多继承,在Python中,新建的类可以继承一个或多个父类

class ParentClass1: #定义父类
    pass

class ParentClass2: #定义父类
    pass

class SubClass1(ParentClass1): #单继承;类后面的括号不是用来传参数的,是用来表示继承的父类的。
    pass

class SubClass2(ParentClass1,ParentClass2): #多继承
    pass

利用类的内置属性__bases__来查看继承的所有父类

SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

PS: 在Python2中有经典类与新式类之分,没有显式地继承object类的类,以及该类的子类,都是经典类,显式地继承object的类,以及该类的子类,都是新式类。而在Python3中,即使没有显式地继承object(object为python内置类),也会默认继承该类。

III:Python的多继承
优点:最大限度地重复使用代码

缺点:(继承表达的是一种什么“是”什么的关系。)
1、违背人的思维习惯
2、代码的可读性会变差
3、不建议使用多继承,扩展性变差,可能引发可恶的菱形问题
(如果真的涉及到一个子类不可避免地要重用多个父类的属性,应该使用Minxins)

2、为什么要用继承:用来解决类与类之间代码冗余的问题

class OldboyPeople:
    school = 'OLDBOY'

    def __init__(self, name, sex, age):

        self.name = name
        self.sex = sex
        self.age = age


class Student(OldboyPeople):
    # school='oldboy'

    # def __init__(self,name,sex,age):
    #    self.name=name
    #    self.sex=sex
    #    self.age=age
    #	 Student没有__init__功能则去父类中去找
    # 如果我需要添加一个学号的功能,需要重新定义一个__init__功能
    # def __init__(self,name,sex,age,stu_code):
    #     OldboyPeople.__init__(self,name,sex,age)
    #     self.stu_code = stu_code
    def choose_course(self):
        print('%s 正向选课' %name)


# stu_obj = Student('lili', 18, 'female')
# print(stu_obj.__dict__)
# print(stu_obj.school)  # 调用父类中的school的值


class Teacher:
    school = 'oldboy'

    def __init__(self, name, sex, age, salary, level):
        # self.name = name
        # self.sex = sex
        # self.age = age
        # 指名道姓地去掉用
        OldboyPeople.__init__(self,name,sex,age)# 这里调用父类的__init__的方法,是调用基本的函数,参数一个也不能少!
        self.salary = salary
        self.level = level

        def score(self):
            print()

    def teach(self):
        print('%s is teaching' % self.name)

tea_object = Teacher('egon', 18, 'male', 3000, 10)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值