失业程序员复习python笔记——继承
继承指的是一个类既拥有另一个类的特征,也拥有不同于另一个类的独特特征。在这里的第一个类叫做子类,另一个叫做父类,特征其实就是类的属性和函数。
来看一个例子:
class Book():
def __init__(self,title,author,__content):
print('init:Book init')
self.title = title
self.author = author
self.__content = __content
def printContent(self):
raise Exception('printContent not implemented')
def printTitle(self):
print(self.title)
class TechnicalBook(Book): #表示TechnicalBook类继承了Book类
def __init__(self, title, author, __content):
print('init:TechnicalBook init')
Book.__init__(self,title,author,'Technical Book....')
self.title = title
self.author = author
self.__content = __content
def printContent(self):
print(self.__content)
book = Book('book title','regina','book content....')
book.printTitle()
tbook = TechnicalBook('python review note','regina','python technical')
tbook.printTitle()
D:\pyproject\venv\Scripts\python.exe D:/pyproject/py12.py
init:Book init
book title
init:TechnicalBook init
init:Book init
python review note
Process finished with exit code 0
首先需要注意的是构造函数。每个类都有构造函数,继承类在生成对象的时候,是不会自动调用父类的构造函数的,因此你必须在 init() 函数中显式调用父类的构造函数。它们的执行顺序是 子类的构造函数 -> 父类的构造函数。
根据上面的执行结果,很容易就看出先打印子类的init:TechnicalBook init 再打印父类的init:Book init
其次需要注意父类 printContent () 函数。如果使用Book直接生成对象,调用 printContent () 函数,就会 raise error 中断程序的执行。这其实是一种很好的写法,叫做函数重写,可以使子类必须重新写一遍 printContent () 函数,来覆盖掉原有函数。
最后需要注意到 printTitle () 函数,这个函数定义在父类中,但是子类的对象可以毫无阻力地使用它来打印 title,这也就体现了继承的优势:减少重复的代码