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)