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

总结

面向过程编程,是程序员根据自己解决问题的步骤和思路,直接完成数据处理的操作。面向对象编程,则通过设计出各种类,并创建对应的对象,将不同的功能赋予不同的对象去完成,最终多个对象共同协作完

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值