一、Python中的继承
面向对象的三大特征之一是继承,优秀的继承代码可以减少很多重复的代码工作,使开发更加高效。下面是Python代码中使用继承的一个示例:
Person.py文件:
class Person(object):
sum = 0
def __init__(self,name ,age):
self.name= name
self.age = age
def get_name(self):
print("Person方法打印name:"+ self.name)
def doHomeWork(self):
print("This is Person Mehod :do homework!”)
Student.py文件:
#从Peron.py文件中导入perons类
from Person import Person
class Student(Person):
#重写构造函数,增加了school新实例变量
def __init__(self,school,name,age):
#第一步:初始化子类特有属性
self.school = school
#第二步:初始化父类属性
#方法1:父类名调用构造方法,方法中必须传入self参数,但不推荐使用
#Person.__init__(self,name,age)
#方法2:使用super关键字
super(Student,self).__init__(name,age)
def doHomeWork(self):
super(Student,self).doHomeWork()
print("Student do homework!”)
测试继承后的效果:
#1.创建子类,由于继承了父类属性,可以访问父类中定义的属性
stu = Student("光明小学","小明",18)
print(stu.name) #打印父类定义的实例变量name
print(Student.sum) #打印父类定义的类变量sum
print(stu.sum) #打印父类定义的类变量sum
#2.调用父类中定义的实例方法
#调用方法1:父类名+实例方法名(传入当前实例参数)
Person.get_name(stu)
#调用方法2:使用子类实例调用
stu.get_name()
#3.测试打印子类特有的属性
print(stu.school) #打印子类特有的实例变量school
#4.测试覆写父类中的方法
#覆写父类方法:子类会覆盖父类中同名的方法
stu.doHomeWork()
'''
This is Person Mehod :do homework!
Student do homework!
'''
二、Python中使用继承的总结
1.Python支持多继承,但是并不推荐大量使用;
2.在子类中使用super可能会报错;
super只能用于Python的新类中,如果基类是经典类,则会报这个错:TypeError: must be type, not classobj
新类:所有类都必须要有继承的类,如果什么都不想继承,就继承到object类。
经典类:什么都不用继承的类
所以为了解决这一问题,代码里的Perosn类继承了object