十分钟学会Python中的面向对象
面向对象为什么难?
提到学习Python语言编程中的难点,面向对象肯定算是一个。虽然面向对象很好的将程序生活化,现实化了,更符合人类的思考模式,但是面向过程语言顺序的执行流程,单纯的条件因果关系无疑更适合初学者掌握。面向对象编程相对更大的代码量也让初学者头痛不已。类和对象
学习面向对象编程,首先要理解类和对象这两个名词。
我们先看看官方定义:
类是具有相同特征的同一类事物的抽象。
对象是类的具体表现形式。
有没有什么更简单的方法理解这两个概念呢?
有!!
如果说人类是一个【类】那么你就是一个【对象】,我是另一个【对象】。
那我们再举两个例子:
颜色是一个类,红色是一个对象,白色是另一个对象。
超级英雄是一个类,美国队长是一个对象,钢铁侠是另一个对象。Python中的类和对象
在Python语言中,类是一个自定义的数据类型,对象是一个由该类创建的一个具体变量。
类是构建对象的模板,规范了对象的特征和行为。也就是说类定义了对象是什么样子的,拥有哪些功能,存储什么样的数据,能对数据做哪些处理。
就像是制造一个机器人,先要画出机器人的设计图纸,然后再生产机器人去完成具体的工作。这个图纸就是类。创建一个类用class关键字,Rect是类的名字,类名采用首字母大写的驼峰命名法当名称由多个单词构成时写作FirstSecondThirdclassRect:init方法,用于初始化刚刚创建的对象definit(self,width,length):self。width和self。length是类的字段,规定了类所创建的对象存储哪些数据self。widthwidthself。lengthlength成员方法,描述了类或对象处理数据的功能。defperimeter(self):returnself。widthself。length
真正处理数据,则需要通过类创建对应的对象创建类对应的对象rect是对象的引用,通过引用我们就可以创建对象3和4则是为init方法传入参数,设置两个字段的值rectRect(3,4)通过引用调用方法,实现retrect。perimeter()写一个面向对象的程序
与面向过程编程,直接编写流程处理数据不同,面向对象编程就像是将生活逻辑映射到程序当中,创建出各种各样的机器人,分工合作,去完成程序的需求。
这里有一个我自己设计的例子。我们去完成这样一个程序,小明手里有两张牌,左手红桃A,右手黑桃K,如果让小明交换双手的牌,求交换之后,左右手的牌各是什么?首先要找出需求中的对象:小明,两张牌,这样看是三个对象。手是小明的一部分。小明,两只手,两张牌,这样看是五个对象,这两种方式都对。设计对象,也就是编写对象对应的类:牌的类classPokerCards:definit(self,color,size):字段是牌的花色和大小self。colorcolorself。sizesize这个方法使得牌的对象可以被转换成字符串。转换的结果就是该方法的返回值defstr(self):returns:s(self。color,self。size)手的类classHand:字段的另一种创建方式,创建在init方法之外,手中可以抓一张牌pokerCard:PokerCards人的类classHuman:definit(self):人的字段是人拥有两只手self。leftHandHand()self。rightHandHand()拿牌defcatchcards(self,card1,card2):self。leftHand。pokerCardcard1self。rightHand。pokerCardcard2展示牌defshowcards(self):由于实现了str方法牌的对象可以被转换成字符串print(左手:str(self。leftHand。pokerCard))print(右手:str(self。rightHand。pokerCard))交换牌defswapcards(self):self。leftHand,self。rightHandself。rightHand,self。leftHand然后创建对象,完成程序的流程:创建小明和两张牌,小明有两只手xiaomingHuman()card1,card2PokerCards(红桃,A),PokerCards(黑桃,K)小明拿牌xiaoming。catchcards(card1,card2)小明展示牌,对比试验xiaoming。showcards()小明交换牌xiaoming。swapcards()小明展示牌xiaoming。showcards()运行结果:左手:红桃:A右手:黑桃:K左手:黑桃:K右手:红桃:A总结
面向过程编程,是程序员根据自己解决问题的步骤和思路,直接完成数据处理的操作。面向对象编程,则通过设计出各种类,并创建对应的对象,将不同的功能赋予不同的对象去完成,最终多个对象共同协作完
想要获取更多免费资料添加微信号:codingbb
更多内容还可关注公众号【扣丁学堂】