继承:
A类继承B类,A即可获得B类的全部公共属性和方法。格式如:class A(B):

class Animal:
    def sleep(self):
        print("zZZ...")

    def eat(self):
        print("yamiyami...")

    def run(self):
        print("huchihuchi...")


class Dog(Animal): #Dog类拥有sleep,eat,run,bark四个方法
    def bark(self):
        print("汪汪汪")

方法重写
子类有时需要对继承自父类的方法进行修改或重写,这时直接定义一个与需要重写的方法名一样的方法即可,如(接上面的代码):

class XiaoTianQuan(Dog): def fly(self): print("我在飞") #重写继承自父类的bark()方法 def bark(self): print("我在叫!我在叫!")

父类方法扩展
有时仅需对父类方法进行扩展无需完全重写,只需在重写方法时加上   super().父类方法    即可:

class XiaoTianQuan(Dog):
    #扩展继承自父类的bark()方法
    def bark(self):
        #继承父类的方法
        super().bark() #此时super()即代表父类(此时的父类为Dog)
        #需要拓展的代码
        print("我在叫!我在叫!")

super类是一个特殊的类,super()代表着一个super类的实例

另外关于子类继承父类时super().__init__()的问题的一些理解:

super().__init__()中的super()与上述super()一样代表父类,super().__init__()语句也就是调用父类中的__init__()函数来初始话父类属性。

若子类中无__init__()函数父类有__init__()函数,则创建子类实例时需要按照父类__init__()函数传入实参,子类将自动继承父类属性,子类继承父类全部方法,例子如下:

class Animal:
    def __init__(self, number):
        self.number = number  # 随意写的

    def sleep(self):
        print("zZZ...")
        print(str(self.number))  # 随意写的

    def eat(self):
        print("yamiyami...")

    def run(self):
        print("huchihuchi...")


class Dog(Animal):  # Dog类拥有sleep,eat,run,bark四个方法
    # def __init__(self, number):
    #     super().__init__(number)
    #     self.years = 20

    def bark(self):
        print("汪汪汪")


xiao_huang = Dog(9)  # 实例化

xiao_huang.sleep()
print('xiao_huang.number'.center(100, '-'))
print(xiao_huang.number)

输出如下:

python子类转父类 python 子类继承父类_python

 若子类中有__init__()函数,父类中有__init__()函数,且子类不写super().__init__()方法,则创建子类实例时需要按照子类__init__()函数传入实参,由于父类属性没有经过super().__init__()方法初始化,则子类将无法继承父类属性,但则仍然继承父类所有方法,例子如下:

class Animal:
    def __init__(self, number):
        self.number = number

    def sleep(self):
        print("zZZ...")
        print(str(self.number))

    def eat(self):
        print("yamiyami...")

    def run(self):
        print("huchihuchi...")


class Dog(Animal):  # Dog类拥有sleep,eat,run,bark四个方法
    def __init__(self, years):
        # super().__init__(number)
        self.years = years

    def bark(self):
        print("汪汪汪")

    def year(self):
        print(str(self.years))

xiao_huang = Dog(20)  # 实例化,注意20为years的实参值
print('xiao_huang.number'.center(100, '-'))
print(xiao_huang.number)
print(xiao_huang.years)

输出如下:

python子类转父类 python 子类继承父类_python子类转父类_02

提示子类Dog()没有number这一属性 .

若使用super().__init__()则子类继承父类属性,且继承父类所有方法,此时子类的__init__()函数中需要保护初始化父类属性所有形参,以传入super().__init__()来初始化父类属性,例子如下:

class Animal:
    def __init__(self, number):
        self.number = number

    def sleep(self):
        print("zZZ...")
        print(str(self.number))

    def eat(self):
        print("yamiyami...")

    def run(self):
        print("huchihuchi...")


class Dog(Animal):  # Dog类拥有sleep,eat,run,bark四个方法
    def __init__(self, years, number):
        super().__init__(number)
        self.years = years

    def bark(self):
        print("汪汪汪")

    def year(self):
        print(str(self.years))


xiao_huang = Dog(20, 9)  # 实例化,注意20,9分别是years和number的实参

xiao_huang.sleep()
print('xiao_huang.number'.center(100, '-'))
print(xiao_huang.number)
print(xiao_huang.years)

输出如下:

python子类转父类 python 子类继承父类_父类_03

本文章前半部分引用自 Python的继承、方法重写、super()类