Python面向对象(七)

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)

#任何类都是继承自object
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


    def printPerson(self):
        print('%s is %d years old'%(self.name,self.age))

per = Person('Mike',54)
per.printPerson()

#类如何去实现继承关系
#一个学生是一个人,而且应该有成绩

#直接继承Person类,不实现任何方法
"""
class Student(Person):
    pass
"""

class Student(Person):
    def __init__(self, name, age, score):
        Person.__init__(self, name, age) #初始化父类构造器
        self.score = score
        self.__id = '123456'             #属性私有化

    def printScore(self):
        #Person.printPerson(self) #调用父类方法
        print('%s\'s score is %d' % (self.name,self.score))

    #getter setter方法

    def set_id(self, id):
        self.__id = id

    def get_id(self):
        return self.__id

stu = Student('Jim',13,98)   

stu.printPerson()
stu.printScore()

#外部可以访问属性
print(stu.score)

#print(stu.__id)
"""
访问私有变量会抛出异常
Traceback (most recent call last):
  File "oo.py", line 51, in <module>
    print(stu.__id)
AttributeError: 'Student' object has no attribute '__id'
"""
#设置值之前
print(stu.get_id())
stu.set_id('987654')
#设置值之后
print(stu.get_id())
小结

继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。