Python面向对象编程:数据封装、继承和多态

首页 > 情感婚姻 > 文章

Python面向对象编程:数据封装、继承和多态

KobeBryant类的方法与普通函数并没有太大区别,类定义中函数第一个参数都是self,除此之外也可以传入普通函数一样的默认参数、可变参数、关键字参数和命名关键字参数等。 数据封装数据封装是面向对象编程的第一大特征。 所谓数据封装,就是指在类定义时指定访问内部数据的方式,这种方式通过在类中定义函数来实现,这样数据就被封装起来了。 而封装数据的函数是和类本身关联在一起的,我们称之为类的方法。 classPlayer(object):def__init__(self,name,score):==pointsdefprint_points(self):print(%s:%s%(,))访问对象数据时:_points()KobeBryant:数据封装还有个好处就是可以给类添加新的方法,直接在定义类的函数中进行添加即可:classStudent(object):...defget_points(self):=28:print("Youareamvpplayer!")=20:print("Youareanallstarplayer!")else:print("hurryup!")使用该方法访问数据:_points()Youareamvpplayer!继承面向对象程序设计的第二大特征叫做继承。 当我们定义一个Class的时候,可以从当前环境下某个现有的类进行继承,新定义的类就可以称之为子类,而之前存在的类可以称之为父类或者是基类。 还是按照前面的类定义的例子,对Player类定义一个do的方法:classPlayer(object):defdo(self):print(Playerisshooting)当我们需要定义一个子类AllStar类的时候就可以直接从Player类继承:classAllStar(Player):pass对于Player类来说,AllStar类就是它的子类,而对于AllStar类来说,Player类就是它的父类。 继承的最大好处在于子类可以获得父类的全部功能,由于父类Player有着do方法,那它的子类AllStar类啥也不用定义就直接获取了父类的方法:Curry=Curry()()"Playerisshooting"继承的另一个好处在于可以对所继承的父类的功能进行修改,继承了老子的本领还可以对该本领推陈出新,子类厉害哟。

多态当子类和父类同时存在某种方法时,子类的方法会覆盖父类的方法。

按前例就是当Player父类和AllStar子类同时存在do方法时,子类会对父类的方法进行覆盖。 我们先来看Curry这个对象的数据类型:isinstance(Curry,AllStar)Trueisinstance(Curry,Player)True看来Curry这个实例对象不仅是AllStar也是一个Player。

原来AllStar这个类作为子类是从Player这个父类上继承下来的!子承父业!因此,在一段继承关系中,如果某个实例对象的数据类型是某个子类,那它的数据类型也可以被看作是父类。

但反过来可不行,不能乱了辈份。 对于在父类下任何新增的子类都不必对该类的方法进行修改,任何依赖于以父类名作为参数的函数都可以不加修改正常运行,其原因就在于多态。 多态的好处在于:对于一个未知变量,我们在只知道它的父类类型而对其子类类型一无所知的情况下可以放心地调用相应的方法,而调用的方法是具体作用在哪个对象上,由运行时确定的对象类型所决定。 多态的厉害支持在于:调用的时候只管拿来调用并不管其中的调用细节。 当我们要新增一个Player子类时,只要保证do方法编写无误,对之前代码是如何调用的并不关心。

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。