面向对象之类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。
通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类。
class 派生类名(基类名):
...
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。
class SubClassName (ParentClass1[, ParentClass2, ...]):
...
在python中继承的一些特点:
1、如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
2、调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量:基类类名.基类方法(self)
3、先在本类中查找调用的方法,找不到才去基类中找。
代码示例1
class person:
def __init__(self,name,year,money):
self.name=name
self.year=year
self.money=money
def printyear1(self):
print (self.name+'的周岁:'+ str(self.year))
def printthing(self):
print 'This is nothing!'
class person_year(person):
def printyear2(self):
print (self.name+'的虚岁:'+ str(self.year+1)) #调用基类的属性:self.属性
person.printyear1(self) #调用基类的方法:基类类名.基类方法(self)
def printthing(self):
print 'This is something!'
p1=person_year('Peter',10,1000)
print p1.money #可以直接调用父类的属性
p1.printyear1() #可以直接调用父类的方法
p1.printyear2() #调用自身的方法
p1.printthing() #重写父类的方法
输出:
1000
Peter的周岁:10
Peter的虚岁:11
Peter的周岁:10
This is something!
代码示例2
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def watch_av(self):
if self._age >= 18:
print('%s可以观看《流星花园》.' % self._name)
else:
print('%s只能观看《熊出没》.' % self._name)
class Student(Person):
def __init__(self,name, age,grade): #重写基类构造器
Person.__init__(self,name, age) #使用父类的
self._grade = grade #子类独有的
def study(self,abc):
print ('%s现在是%s学生,喜欢学习%s.' % (self._name,self._grade,abc))
def main():
stu = Student('王大锤', 15,'初三')
stu.study('数学')
stu.watch_av()
if __name__ == '__main__':
main()
输出:
王大锤现在是初三学生,喜欢学习数学.
王大锤只能观看《熊出没》.
多态
子类在继承了父类的方法后,可以对父类已有的方法给出新的实现版本,这个动作称之为方法重写。通过方法重写可以让父类的同一个行为在子类中拥有不同的实现版本,当调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为,这个就是多态(poly-morphism)。