Python学习(15):面向对象(3)-继承

一、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

猜你喜欢

转载自blog.csdn.net/dreamcoffeezs/article/details/80620514