欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

从零开始的Python学习Episode 19——面向对象(2)

程序员文章站 2022-05-02 13:01:25
面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(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中找,找不到再从他们的父类中找。

 

如果在子类中需要使用父类中已经被重写的方法,则可以通过

类名.方法名()

的方法调用。