OOP编程|我拿你当朋友,你却把我当爸爸


5865417-000a6950f07ba39a.jpg

1.我拿你当朋友,你拿我当爸爸

5月10日,在法国大选第二轮投票中,马克龙战胜了极右翼政党的勒庞,并在14日就职,成为最年轻的法国总统。39岁的政坛小鲜肉火了,一同火起来的,还有他的妻子布丽吉特,以及他们饱受争议的爱情。

曾经,布丽吉特是马克龙的中学老师。而布丽吉特的大女儿劳伦斯,又和马克龙是同班同学。所以,当时他们的关系是这样的:


5865417-42e16ba0a34063c5.jpg
之前的关系图

最终,有情人终成眷属。马克龙成为了布丽吉特的丈夫,所以他们的关系变成了这样:


5865417-44ad43c66a108634.jpg
之后的关系图

劳伦斯应该会想:这让我情何以堪?

马克龙则心理暗爽:我拿你当朋友,你却拿我当爸爸。

贵圈套路深,还是回农村,农村路更滑,还是码代码吧。然而python中的OOP一样可以这么乱。

2.OOP的继承与多态

之前介绍过python面向对象编程,它可以轻松地创建一个类,使任务从步骤化变为模块化,方便程序的管理和使用。类能够方便管理使用的原因之一,是因为类的方法可以继承和重写,因而具有继承和多态性。也是正因如此,使用不当就会变得很混乱。

继承描述了两个类的关系,即一个类的大部分属性和方法是从另一个类中获得。也就是一个子类,继承了父类的属性方法。通过继承的方式,可以省略掉重复的代码,方便地创建功能相似的新类。“子类”和“父类”也可以叫做“派生类”和“基类”。继承语法如下:

class子类名(父类名):

1.隐式继承(implicit inheritance)

子类中来自父类的方法和属性可以省略,省略的功能便以隐式继承的形式存在。还是举加班的例子,底薪200,1个字0.1¥,分别写了两篇稿件,1000字和2500字,计算劳务费,用如下方式创建一个子类:

class parent(object):

    def __init__(self, num):

        self.cal = num

    def pay(self):

        self.pay =200+self.cal /10

        print self.pay

class child (parent):

#隐式继承父类所有方法pass

father = parent(1000)

son = child(2500)

father.pay()

son.pay()

输出:

300

450

当调用子类中的函数时,子类中并不存在,那么python就会去父类中查找并调用。而“pass”只是一个占位符,让结构显得更好看,没有实际意义。

2.显式覆盖(override)

隐式继承完全继承了父类的特性,如果让子类实现一些新功能时,可以重写方法,即名称不变,内容换新。假设父类指加班写稿的劳务,子类为日常写稿劳务,日常写稿底薪为100:

class parent(object):

    def __init__(self, num):

        self.cal = num

    def pay(self):

        self.pay =200+self.cal/10

        print self.pay

class child(parent):

#覆盖父类中的方法

    def pay(self):

        self.pay =100+self.cal/10

        print self.pay

father = parent(1000)

son = child(1000)

father.pay()

son.pay()

输出:

300

200

3.随时切换

有时在程序中我们覆盖了父类的方法,又想重新调用,那么可以使用语法如下:

super(子类名,self).父类方法()

接着上面的例子,想在调用子类的时候,即运行覆盖后的方法,又调用父类的方法:

class parent(object):

    def __init__(self, num):

        self.cal = num

    def pay(self):

        self.pay =200+self.cal/10

        print self.pay

class child(parent):

    def pay(self):

        self.pay =100+self.cal/10

        print self.pay

        super(child,self).pay()

        #调用父类中的方法

son = child(1000)

son.pay()

输出:

200

300

看到这里,大家或许已经get这一项技能了。类的继承减少了代码的重复,但是尽量在代码关系清楚的情况下使用。否则又产生“我拿你当朋友,你拿我当爸爸”的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值