继承与派生
一、继承
1.什么是继承?
继承是一种新建类的方式,在python中支持一个儿子继承多个爹
新建的类称为子类或派生类
父类又可称为基类或者超类
子类会"遗产"父类的属性
2.为什么要使用继承
减少代码冗余
3怎么用继承
class ParentClass1: #父类 pass class ParentClass2: #父类 pass class Subclass1(ParentClass1): #子类 pass class Subclass2(ParentClass1,ParentClass2): pass print(Subclass1.__bases__) #.__bases__# 类所有父类构成的元组(在讲继承时会讲) print(Subclass2.__bases__)
二、寻找继承关系
1.继承是类与类之间的关系,寻找这种关系需要先抽象再继承
class OldboyPeople:
school = 'oldboy'
def __init__(self, name, age, sex): #将子类公用的特征与技能放父类之中
self.name = name
self.age = age
self.sex = sex
class OldboyTeacher(OldboyPeople):
def change_score(self):
print('teacher %s is changing score' %self.name)
class Oldboystudent(OldboyPeople):
def choose(self):
print('student %s choose course' %self.name)
tea1 = OldboyTeacher('egon', 18, 'male') #OldboyTeacher.__init__(...),调用类产生一个对象
stu1=Oldboystudent('alex',73,'female')
print(tea1.name,tea1.age,tea1.sex) #通过对象的名称空间指向类中的名称空间中的名字,打印出我们老师的特征信息
# print(stu1.name)
三、基于继承再看属性查找
class OldboyPeople:
school = 'oldboy'
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def f1(self):
print('爹的f1')
class OldboyTeacher(OldboyPeople):
def change_score(self):
print('teacher %s is changing score' %self.name)
tea1 = OldboyTeacher('egon', 18, 'male') #
# print(tea1.__dict__) #打印对象的特征字典=》{'name': 'egon', 'age': 18, 'sex': 'male'},对象/类名.__dict__# 类/对象的字典属性
# print(tea1.name) #打印对象的名字属性=》egon
# print(tea1.school) #=》oldboy
# print(tea1.change_score) #累的一种绑定方法 =》<bound method OldboyTeacher.change_score of <__main__.OldboyTeacher object at 0x0000000001E7EF98>>
print(tea1.f1) #先从自己查找 ,自己没有到自己的类中进行查找,没有到父类中查找
# <bound method OldboyPeople.f1 of <__main__.OldboyTeacher object at 0x00000000021CEF98>>
继承的属性查找
class Foo:
def f1(self):
print('Foo.f1')
def f2(self): #self=obj
print('Foo.f2')
self.f1() #obj.f1(),不会就近调用父类中的f1,而是调用子类中的f1
class Bar(Foo):
def f1(self):
print('Bar.f1')
obj=Bar() #调用的类没有传参
print(obj.__dict__) #打印的是一个空字典
obj.f2() #继承的属性查找=》Foo.f2》》Foo.f2
四、派生
定义:子类定义自己新的属性,如果与父类重名则以子类自己为准
class OldboyPeople:
school = 'oldboy'
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def f1(self): #父类与子类属性重名,以子类自己的属性为准
print('爹的f1')
class OldboyTeacher(OldboyPeople):
def change_score(self):
print('teacher %s is changing score' %self.name)
def f1(self): #派生类属性
print('儿子的f1')
tea1 = OldboyTeacher('egon', 18, 'male') #调用类产生一个对象,
tea1.change_score() #通过对象的名称空间中的名字name,指向类中的名称空间的名字change_score ,=>>teacher egon is changing score
tea1.f1()
五、经典类与新式类
'''
1、新式类:
继承object的类,以及该类的子类,都是新式类
在python3中,如果一个类没有指定继承的父类,默认就继承object
所以说python3中所有的类都是新式类
2、经典类(只有在python2才区分经典类与新式类):
没有继承object的类,以及该类的子类,都是经典类
'''
# print(object)
class Foo(object):
pass
class Bar(Foo):
pass
# print(Foo.__bases__)
print(Bar.__bases__)
python之基础知识大全

浙公网安备 33010602011771号