广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何理解“面向对象”编程思想
  • 205
分享到

如何理解“面向对象”编程思想

面向对象思想 2023-01-30 23:01:18 205人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

理解面向对象,首先理解要它的基础概念: 面向对象是将现实问题构建关系,然后抽象成 类 ( class ) ,给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。 在不同的语言中,

理解面向对象,首先理解要它的基础概念:

面向对象是将现实问题构建关系,然后抽象成 类 ( class ) ,给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。

在不同的语言中,对象的定义范围不同。在 python 中 类 和 类的实例 都称为 对象 ( Object ),因为 Python 的类是更顶级的 type 实例化后的对象;而在 Java 等静态语言中,一般把类的实例称为对象。

 

理解了理论知识后,接着通过例子,再理解面向对象的三大特征:封装、继承、多态。

下边我们把女娲造人的神话故事用面向对象来叙述一遍:

假设我们是女娲(程序设计者),我们突然有个想法,想造一群和自己差不多的小人,小人需要有男女两种性别,外观和行为也有一些差异。那首先我们分析出,不管什么性别,都应该有四肢,所以我们先仿照自己的构造,在脑海中构思泥人的样子(抽象成基类),然后先赋予泥人一些共有的行为(定义类的实例方法):

class Human(object):

    def __init__(self, name='泥人'):
        // 有个名字,有两只手,两条腿
        self.name = name
        self.hands = 2
        self.legs = 2

    def introduce_self(self):
        // 介绍自己
        print('我是%s' % self.name)

然后我们先捏3个泥人,并给他们取了不同的名字:

>>> a = Human('大强子')
>>> b = Human('二狗子')
>>> c = Human('三愣子')

我们让其中一个人介绍自己:

>>> a.introduce_self()
我是大强子

然后我们继续完成想法,需要给泥人增加两种性别,并且异性之间能结婚,我们开始在刚才泥人模型的基础上(继承于基类),构思出两种性别的泥人的区别(设置不同的属性),然后让他们都可以工作,但工作的内容不一样(调用相同的方法出现不同结果,是多态性),并决定让男人可以娶女人(将这个行为定义为男人的方法)。

import random

class Female(Human):

    def __init__(self, name):
        // 调用父类的初始化方法,依然有名字、两只手、两条腿
        super().__init__(name)
        // 头发和力量进行随机取值
        self.hair = random.randint(3, 5)
        self.power = random.randint(1, 3)
        // 是否已婚
        self.married = False

    def work():
        print('%s采摘了一些果子' % self.name)

class Male(Human):

    def __init__(self, name):
        super().__init__(name)
        self.hair = random.randint(0, 2)
        self.power = random.randint(2, 5)
        self.married = False

    def work():
        print('%s出去打猎了一天' % self.name)

    def marry(self, other):
        // 判断自己或对方是否已结婚,否则抛出异常
        if self.married is True or other.married is True:
            raise ValueError('法律不支持多次结婚')
        // 判断对方是否是女性,否则抛出异常
        if instance(other, Female):
            self.married = True
            other.married = True
        else:
            raise TypeError('法律不支持同性结婚')

然后我们就可以让小人活动起来:

>>> a = Male('大强子')
>>> b = Male('二狗子')
>>> c = Female('翠花')
>>> for h in [a, b, c]:
...     // 调用父类的方法
...     h.introduce_self()
我是大强子
我是二狗子
我是翠花
>>> for h in [a, b, c]:
...     // 多态性使相同的方法产生不同的结果
...     h.work()
大强子出去打猎了一天
二狗子出去打猎了一天
翠花采摘了一些果子
>>> a.marry(c)
>>> a.married
True
>>> c.married
True
>>> b.marry(c)
ValueError: 法律不支持多次结婚
>>> b.marry(a)
TypeError: 法律不支持同性结婚

 

看到这里你应该会发现,面向对象是更接近人类思维模式的编程思想,在这种可以具象化的需求中,可以极大简化其中的逻辑,让我们关注于设计对象的属性和方法。

虽然你确实可以通过写一长串函数来达到同样的效果,那实际是另一种编程思想:面向过程,通过函数实现过程中一系列的功能,最后按顺序组合后达成需求。

这并不是面向过程弱于面向对象,而是在不同的需求中要选择最合适的设计思路,比如在设计顺序执行的脚本中,明显面向过程的设计思路是更加适合,如果我们还去定义类就有些累赘了。

这也是题主提出的疑问,正是因为没有遇到适合面向对象的需求。

如果是拥有复杂关系的需求,我们就应该尽可能将互相有关联的行为抽象成类,比如每一个网页,网页中每一个组件 等等。实际上面向对象帮助我们在十万行代码的大型项目中,仍然可以游刃有余,正因为如此,才能发展为目前应用最为广泛的编程思想。

 


 

最后,不管是面向什么编程,终究还是要面向人生

欢迎关注我的微信公众号:面向人生编程

无论什么样的编程思想,都不该只存留在代码之中,更应伴随于整个人生旅途,这个公众号不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

--结束END--

本文标题: 如何理解“面向对象”编程思想

本文链接: https://www.lsjlt.com/news/181371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解“面向对象”编程思想
    理解面向对象,首先理解要它的基础概念: 面向对象是将现实问题构建关系,然后抽象成 类 ( class ) ,给类定义属性和方法后,再将类实例化成 实例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。 在不同的语言中,...
    99+
    2023-01-30
    面向对象 思想
  • 什么是js面向对象编程思想
    什么是js面向对象编程思想,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。随着像Node.js这类技术的出现,你现在可以在服务器...
    99+
    2022-10-19
  • 【JavaSE】面向对象编程思想之继承
     【本节目标】 继承 组合 目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. 子类构造方法 7....
    99+
    2023-09-03
    java 开发语言 学习方法
  • 浅谈Python面向对象编程oop思想心得
    花了几个小时给小表弟普及了一下OOP的知识,索性总结一下写篇文章。 OOP全称Object Oriented Programming 即面向对象编程,之所以有这么一个奇怪的称呼,是因...
    99+
    2022-11-12
  • Java语言面向对象编程思想之类与对象实例详解
    在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧。首先我们来简单的阐述面向对象的思想。面向对象:官方的语言很抽象,我们把官方的解释和定义抛开。想想,自己有什么,对!!我们自己有手...
    99+
    2023-05-31
    java 面向对象 之类
  • SpringAOP详解面向切面编程思想
    目录1. 什么是 Spring AOP2. AOP 的组成2.1 切面 (Aspect)2.2 切点 (Pointcur)2.3 连接点 (Join Point)2.4 通知 (Ad...
    99+
    2022-11-13
  • 面向对象编程是什么意思
    面向对象编程是一种编码设计,它使用数据来表示一组指令。它是一种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它由描述状态的属性和用来实现对象行为的方法组成,完成了从数据模型到处理模型的结合与统一。什么是面向对象编程?面向对象编...
    99+
    2023-07-17
  • 理解Java面向对象编程设计
    目录1 前言2 结构化程序设计3 面向对象编程设计4 码农洞见4.1 两种编程范式之间的区别4.2 两种编程范式之间的联系1 前言 计算机革命的起源来自机器。编程语言就像是那台机器。...
    99+
    2022-11-12
  • 如何从面向对象思维理解Vue组件
    这篇文章主要讲解了“如何从面向对象思维理解Vue组件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何从面向对象思维理解Vue组件”吧!什么是组件用面向对象...
    99+
    2022-10-19
  • Python 面向对象编程详解
    Python 面向对象 方法没有重载# 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含3个部分:方法名、参数数量、参数类型。 Python 中,方法的的...
    99+
    2022-12-30
    python面向对象程序设计 python面向对象的三个基本特征 python面向对象编程简单例子
  • Java编程思想对象的容纳实例详解
    Java提供了容纳对象(或者对象的句柄)的多种方式,接下来我们具体看看都有哪些方式。有两方面的问题将数组与其他集合类型区分开来:效率和类型。对于Java来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组。数组实际代...
    99+
    2023-05-31
    java 对象 容纳
  • 怎么理解Python中的面向对象编程
    本篇内容主要讲解“怎么理解Python中的面向对象编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python中的面向对象编程”吧!Python支持多种类型的编程范式,例如过程式编程、...
    99+
    2023-06-02
  • Java编程中的面向对象怎么理解
    本篇内容主要讲解“Java编程中的面向对象怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java编程中的面向对象怎么理解”吧!许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的...
    99+
    2023-06-17
  • JavaScript面向对象编程详细讲解
    这篇文章主要介绍“JavaScript面向对象编程详细讲解”,在日常操作中,相信很多人在JavaScript面向对象编程详细讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • C++编程面向对象入门全面详解
    目录类1. struct和class的区别2. explicit构造3. const和mutable4. 自引用5. static复数的实现6.成员函数重载7.运算符重载8.new9...
    99+
    2022-11-12
  • 浅析从面向对象思维理解Vue组件
    在多次使用到相同的函数和相同的HTML代码时,可以考虑抽取为组件。想用就调用,想改就传参,就是组件的好处。 什么是组件 用面向对象的思维去理解Vue组件,可以将所有的事物都抽象为对象...
    99+
    2022-11-12
  • C++面向对象编程之析构详解
    目录1. 概述2. 详论2.1. 对象生命周期2.2. 不一定需要显式析构2.3. 析构的必要性3. 总结1. 概述 类的析构函数执行与构造函数相反的操作,当对象结束其生命周期,程序...
    99+
    2022-11-13
  • 详解Java面向对象编程之多态
    目录Java面向对象编程之多态一.对于多态的理解:二.多态的实现方法总结Java面向对象编程之多态 一.对于多态的理解: 通俗点理解,多态其实就是一词多义,就是一种方法的多种状态,即...
    99+
    2022-11-12
  • 一文详解Go的面向对象编程
    目录概述实战常规函数写法调用结构体类型上的方法调用接口类型上的方法嵌入式接口概述 Go 语言的面向对象编程有三个重要的思想:封装、继承和多态。 封装 Go 语言通过 struct 结...
    99+
    2023-05-18
    Go语言 面向对象
  • Python学习之面向对象编程详解
    目录什么是面向对象编程(类)类的关键字 - class类的定义与使用类的参数 - selfself 的解析与总结类的构造函数构造函数的创建方法关于对象的生命周期什么是面向对象编程(类...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作