python的继承、多态、supper()

参考文章:https://www.liujiangblog.com/course/python/44

 

继承(python3)

  • 子类在调用某个方法或变量的时候,首先在自己内部查找,如果没有找到,则开始根据继承机制在父类里查找。
  • 根据父类定义中的顺序,类似以深度优先的方式逐一查找父类

多态

  • 当多个子类继承父类,只要父类中有的方法,不管子类有没有重写,都可以直接调用(参数要正确)

super()函数

       子类中如果有与父类同名的成员,那就会覆盖掉父类里的成员,那如果你想强制调用父类的成员呢?super()函数可以解决这个问题。

下面的例子实现加减运算,父类中有加运算,所以通过super直接使用

class Add:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        print("父类的__init__方法被执行了!")

    def add(self):
        print("父类的add方法被执行了!")
        return self.a + self.b


class Sum(Add):
    def __init__(self, a, b, opt):
        super(Sum, self).__init__(a=a, b=b)
        self.a = a
        self.b = b
        self.opt = opt

    def operations(self):
        if self.opt == 'add':
            return super(Sum, self).add()
        elif self.opt == 'reduce':
            print ('a: ', self.a, 'b: ', self.b)
            return self.a - self.b


obj1 = Sum(1, 2, 'add')
sum1 = obj1.operations()
print('sum: ', sum1)

obj2 = Sum(1, 2, 'reduce')
sum2 = obj2.operations()
print('sum: ', sum2)


>>>
父类的__init__方法被执行了!
父类的add方法被执行了!
sum:  3
父类的__init__方法被执行了!
a:  1 b:  2
sum:  -1


__init__与__new__的区别

__init__是经常用的,作用是是初始化实例的变量,__new__再__init__之前调用,作用是创建实例

class Student():
    # __new__方法用于创建对象并返回对象
    def __new__(cls, *args, **kwargs):
        print(cls)                  # <class '__main__.Student'>, 代表当前类
        print("__new__ ")
        return object.__new__(cls)  # 返回创建的实例

    # 返回对象时会自动调用__init__方法进行初始化
    def __init__(self, name, age):
        print("__init__ ")
        self.name = name
        self.age = age

    def __str__(self):
        return "the age of student[%s] is %s" % (self.name, self.age)


if __name__ == '__main__':
    t1 = Student("zs", 18)
    print(t1)


"""
<class '__main__.Student'>
__new__ 
__init__ 
the age of student[zs] is 18
"""

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值