从零开始的Python学习Episode 19——面向对象(2)
程序员文章站
2022-10-05 08:36:02
面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称 为基类或超类,新建的类称为派生类或子类。 子类会“”遗传”父类的属性,从而解决代码重用问题。 单继承与多继承 派生中方法调用的规则 子类也可以添加自己新的属性或者在自己这里重新定义这些属性 ......
面向对象之继承
继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称
为基类或超类,新建的类称为派生类或子类。
子类会“”遗传”父类的属性,从而解决代码重用问题。
单继承与多继承
class par1: pass class par2: pass class ch1(par1):#单继承 pass class ch2(par1,par2):#多继承 pass
派生中方法调用的规则
子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。
但在多继承中情况就会稍微有点复杂,因为如果两个父类中有相同名字的方法的话,子类会调用哪一个?
试验:
class par1(): def f1(self): print('this is par1.f1') class par2(): def f1(self): print('this is par2.f1') class ch2(par1,par2): pass obj = ch2() obj.f1() #输出:this is par1.f1
class par1(): def f2(self): print('this is par1.f1') class par2(): def f1(self): print('this is par2.f1') class ch2(par1,par2): pass obj = ch2() obj.f1() #输出:this is par2.f1
看来是优先在第一个父类中找,找不到再找下一个。
class grandpar: def f1(self): print('this is grandpar.f1') class par1(grandpar): def f2(self): print('this is par1.f1') class par2(grandpar): def f1(self): print('this is par2.f1') class ch2(par1,par2): pass obj = ch2() obj.f1() #输出:this is par2.f1
class grandpar: def f1(self): print('this is grandpar.f1') class par1(grandpar): def f2(self): print('this is par1.f1') class par2(grandpar): def f2(self): print('this is par2.f1') class ch2(par1,par2): pass obj = ch2() obj.f1() #输出:this is grandpar.f1
当父类还有父类的时候,会先在par1,par2中找,找不到再从他们的父类中找。
如果在子类中需要使用父类中已经被重写的方法,则可以通过
类名.方法名()
的方法调用。
上一篇: Django路由分配以及模版渲染
下一篇: js 阻止冒泡事件和默认事件