python的入门18

文章介绍了Python中的继承概念,包括如何创建子类并调用父类的方法。接着讨论了方法重写,当子类需要覆盖父类的同名方法时如何操作。此外,详细阐述了super()函数的使用,包括在子类中调用父类的初始化方法和一般方法。最后展示了super()在多继承场景下的应用。
摘要由CSDN通过智能技术生成

继承

继承用于类的创建上,新创建的叫子类,而被继承的叫做父类。子类可以使用父类属性,继承是描述类与类之间的关系。
在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。

1、继承

class A():
    def __init__(self):
        self.name = '张楠'

    def test_a(self):
        print("张楠大帅哥")


class B(A):
    def __init__(self):
        self.name = '飞扬'

    def test_b(self):
        self.test_a()
        print("飞扬大帅哥")


obj = B()
obj.test_b()

输出结果为:
在这里插入图片描述

例子中,B类只继承A类的方法。在B类中用self.test_a()即可调用A类的test_a()方法

在这个例子中,类B继承了类A,因此类B的实例对象可以访问类A中的方法和属性。当在类B的方法中使用self.test_a()时,self代表类B的实例对象,因此可以调用类A中的test_a方法。

当调用self.test_a()时,程序会查找类B中是否存在test_a方法。如果类B中没有定义test_a方法,它会继续查找父类A中是否存在该方法。因为类B继承了类A,所以可以找到并调用父类A中的test_a方法。

因此,self.test_a()可以成功调用父类A中的test_a方法,并打印出"张楠大帅哥"这个结果。

2、方法重写

在某些场景下,子类继承了父类的属性和方法,但子类有同名的方法,这时候就需要重写子类的方法了。

class A():
    def __init__(self):
        self.a = 'a'

    def test(self):
        print("张楠大帅哥")


class B(A):
    def __init__(self):
        self.b = 'b'
        super().__init__()

    def test(self):
        print("飞扬大帅哥")

obj=B()
obj.test()

输出结果为:

在这里插入图片描述

例子中B类继承A类的属性和test()方法,但B也有test方法,那么只需要在B类中重新定义个test()方法即可。
子类和父类都有这个方法,那么调用的时候就会优先调用子类的方法。

3、super(父类)方法

子类和父类有相同的方法,如果子类想调用父类相同的的方法。可以使用super()方法。
super默认省略了两个参数 第一个参数是类名,第二个参数是self。两个参数可以省略不传递例如 super(Student,self)

class People(object):
    def __init__(self, name):
        self.name = name

    def greet(self):
        print('Hello, I am %s.' % self.name)


class Student(People):
    def greet(self):
        super(Student, self).greet()  #调用父类People的greet方法
        print('帅帅帅。。。')


d=Student("张楠")

d.greet()



输出结果为:
在这里插入图片描述
调用方法的时候会先调用父类的方法。

1、子类中调用父类的初始化方法了。

super 的一个最常见用法可以说是在子类中调用父类的初始化方法了。

class Base(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b


class A(Base):
    def __init__(self, a, b, c):
        super(A, self).__init__(a, b)  # Python3 可使用 super().__init__(a, b)
        self.c = c

a=A(100,200,300)

print("a=%d, b=%d, c=%d" % (a.a,a.b,a.c))

输出结果为:
在这里插入图片描述

2、深入super()的应用

class Base(object):
    def __init__(self):
        print("enter Base")
        print("leave Base")


class A(Base):
    def __init__(self):
        print("enter A")
        super(A,self).__init__()
        print("leave A")


class B(Base):
    def __init__(self):
        print("enter B")
        super(B,self).__init__()
        print("leave B")

class C(A,B):
    def __init__(self):
        print("enter C")
        super(C,self).__init__()
        print("leave C")


c=C()

输出结果为:
在这里插入图片描述
这个代码的运行情况在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值