python的继承

python的继承:继承提供了一种在类之间共享功能的方法,下面会讲述下列几种方式:
1、单继承关系
2、多继承关系
3、间接继承
4、super 函数

想象几个类,Cat,Dog,Rabbit等。虽然它们在某些方面可能有所不同(只有 Dog 可能有 bark 方法),但它们可能在其他方面相似(都具有 color 和 name 的属性)。

这种相似性可以通过使它们全部从包含共享功能的超类 Animal (俗称父类)中继承来表示。

要从另一个类继承一个类,请将超类名放在类名后面的括号中。

例如:
1、单继承关系

class A:
  def spam(self):
    print(1)

class B(A):
  def spam(self):
    print(2)
    super().spam()
            
B().spam()

打印结果:

结果:

2
1  

上面代码执行的过程为:B().spam() :B类因为继承了A类就同时拥有了B类和A类的功能,B类此时调用spam()对象,而spam()对象在A、B两个类中都有,所以输出2、1,为什么先输出2呢?因为代码的规则时就近原则。

2、多继承关系

class Animal:
    def __init__(self, name, color):
        self.name = name
        self.color = color
class Cat(Animal):
    def purr(self):
        print("Purr...")
class Dog(Animal):
    def bark(self):
        print("Woof!")
fido = Dog("Fido", "brown") #fido=>法斗、菲多
print(fido.color) #父类的属性也是可以调用的;
fido.bark()
class Pig(Cat,Dog):  #可以一次继承几个类;
    pass
p = Pig('阿狗','黄色')
p.purr()
p.bark()

执行结果

brown
Woof!
Purr...
Woof!

上面代码执行的过程为: Cat和Dog继承Animal,意思就是都继承了Animal类的功能,而Pig继承(Cat,Dog),fido = Dog(“Fido”, “brown”),——》————init__初始化,先执行print(fido.color) 得到brown,Dog(Animal):执行得到Woof,下面规则类似,其中pass是占位符,方便你下次书写,不至于报错


3、间接继承

class A:
    def method(self):
        print("A method")
class B(A):
    def another_method(self):
        print("B method")
class C(B):
    def third_method(self):
        print("C method")
c = C() #说明此时C类拥有A,B类中所有的属性和方法;
c.method()
c.another_method()
c.third_method()

结果:

A method
B method
C method

上面代码执行的过程为:B继承A类,C类继承B类,C等于拥有A‘、B的功能呢个,此时将c = C() 说明此时C类拥有A,B类中所有的属性和方法;下面依次调用得到A method,B method,C method


4、super 函数

class AA:
    name = "helloworld"
    def __init__(self):
        print('构造方法')
    def spam(self):
        print(1)
class BB(AA):
    def spam(self): #重写;
        print(2)
        super().spam() #调用父类的方法  super()函数一定是放在子类中; 解决方法名和属性相同时;
        print(super().name) #调用父类的属性
        AA.__init__(self) #调用父类的构造方法,一定要用类名来调用;
b = BB() #new出一个对象,创建一个对象;
b.spam()
BB().spam() #匿名对象的写法;

打印

构造方法
2
1
helloworld
构造方法
构造方法
2
1
helloworld
构造方法

Process finished with exit code 0

上面代码其他的执行规则都类似,只有一个super 函数,只在子类使用,使用的场景是父子类属性相同时,在子类需要使用父类的时候

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值