十分钟学会Python中的面向对象

面向对象为什么难?

提到学习Python语言编程中的难点,面向对象肯定算是一个。虽然面向对象很好的将程序生活化,现实化了,更符合人类的思考模式,但是面向过程语言顺序的执行流程,单纯的条件因果关系无疑更适合初学者掌握。面向对象编程相对更大的代码量也让初学者头痛不已。

类和对象

学习面向对象编程,首先要理解“类”和“对象”这两个名词。
我们先看看官方定义:
类是具有相同特征的同一类事物的抽象。
对象是类的具体表现形式。

十分钟学会Python中的面向对象

十分钟学会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

更多内容还可关注公众号【扣丁学堂】

展开阅读全文

页面更新:2024-04-16

标签:红桃   黑桃   字段   字符串   机器人   左手   右手   流程   对象   过程   语言   功能   程序   方法   数据   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top