封装,继承,多态

面向对象三大特性:封装,继承,多态
人总结:
1、封装,即将代码块抽出来封装成类或者函数,从而提高复用性

2、继承,即子类继承父类的类属性和方法,包括类变量、类方法、静态方法、实例方法。当子类对象执行的内容没有时用父类的。python中支持多继承,父类私有的属性不会被继承
——这里要重点提一下:继承同样适用于__init__(),new()等自动执行的魔法方法。比如子类创建实例对象时,首先会在子类中找new方法执行,new执行成功并返回对象后再找init方法执行,如果子类中没有new方法和init方法则调用父类中的new和init方法

3、多态,即一个对象具有多种形态,一般来说发生在继承关系上,体现在应用上主要是当需要一个某个类的对象时可以传一个该类的子类对象过去,既他的子类可以“充当“它父类的角色。但同时python又是一种弱类型的语言,因此多态可以发生在没有继承关系的基础上就是所谓的鸭子类型,只是在调用关系上满足,而并没有继承关系

举个栗子:子类B中无new、init方法,则都是调用父类中的new、init方法

class A():
    ...:     def __new__(cls,*args,**kwargs):
    ...:         print(" A  new method is running!--")
    ...:         return object.__new__(cls)
    ...:     def __init__(self,*args):
    ...:         print("A init method is running")
    ...:         
    ...:         

In [89]: class B(A):
    ...:     def bb(self):
    ...:         print("B bb method is running")



a = A()
 A  new method is running!--
A init method is running

In [91]: b = B()
 A  new method is running!--
A init method is running

In [92]: isinstance(b,B)
Out[92]: True
In [93]: isinstance(b,A)
Out[93]: True
In [94]: isinstance(a,B)
Out[94]: False
In [95]: b.bb()
B bb method is running

B子类中有init方法,则调用子类自己的init方法

 class B(A):
    ...:     def bb(self):
    ...:         print("B bb method is running")
    ...:     def __init__(self):
    ...:         print("B init method is running!")
    ...:         

In [98]: b = B()
 A  new method is running!--
B init method is running!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值