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