返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习笔记5——一切皆对象
  • 763
分享到

Python学习笔记5——一切皆对象

学习笔记一切皆对象 2023-01-30 22:01:33 763人浏览 八月长安

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

摘要

我发现我不适合看视频学习,看书看文字觉得更舒服,看大神的博客教程:Python快速教程——这是大神的第一篇博客,点击下一篇,一篇篇看下去,都很通俗易懂,坐看看大神是如何成长的,可以利用碎片时间看,收获很多,不再迷茫。 另外,下面的评论也很

我发现我不适合看视频学习,看书看文字觉得更舒服,看大神的博客教程Python快速教程——这是大神的第一篇博客,点击下一篇,一篇篇看下去,都很通俗易懂,坐看看大神是如何成长的,可以利用碎片时间看,收获很多,不再迷茫。

另外,下面的评论也很有干货,值得认真看看,也会有收获。

需要注意的是,大神用的是python2.x,而我用的是python3.6,部分代码可能会有区别,但思想是一脉相承的,这个有些评论里有提到的。

主要通过这里的博客学习的:Python基础08 面向对象的基本概念  以及 Python基础09 面向对象的进一步拓展

Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。面向对象的最主要目的是提高程序的重复使用性。Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。下面是对面向对象的一种理解,基于分类。

相近对象,归为类

在人类认知中,会根据 属性相近 把东西 归类 ,并给类命名。比如鸟类,其共同属性有:有羽毛,卵生等。

面向对象就是模拟了以上人类认知过程。上面的‘东西’,在python中就称为对象(object)。

下面贴代码:

"""
    定义一个类别class,就是鸟类Bird。在隶属于这个类比的语句块中,定义了两个变量,一个是有羽毛have_feather,一个是生殖方式way_of_reproduction,这两个变量就是鸟类Bird的属性attribute
"""
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

"""
    创建y一个对象,小鸡summer,类别鸟中的一个对象,summer就有了鸟类的属性,对属性的引用是通过 对象.属性 object.attribute 的形式实现的
"""
summer = Bird()
print(summer.have_feather, summer.way_of_reproduction)

日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。

这样的一些“行为”属性为方法(method)。Python中通过在类的内部定义函数,来说明方法。

"""
重新定义鸟这个类别,新增一个方法属性,就是表示移动的方法move,它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。
另外两个参数,dx, dy表示在x、y两个方向移动的距离。move方法会最终返回运算过的position。在最后调用move方法的时候,我们只传递了dx和dy两个参数,不需要传递self参数(因为self只是为了内部使用)。
"""
class Bird(object): have_feather = True way_of_reproduction = 'egg' def move(self, dx, dy): position = [0,0] position[0] = position[0] + dx position[1] = position[1] + dy return position summer = Bird() print('after move:',summer.move(5,8))

子类

类别本身还可以进一步细分成子类,比如鸟类可以进一步分为鸡,大雁,黄鹂等。

在OOP面向对象编程中,可以通过 继承(inheritance) 来表达上述概念:

class Chicken(Bird):
    way_of_move = 'walk'
    possible_in_KFC = True

class Oriole(Bird):
    way_of_move = 'fly'
    possible_in_KFC = False

summer = Chicken()
print(summer.have_feather)
print(summer.move(5,8))

新定义的鸡Chicken类的,增加了两个属性:移动方式way_of_move,可能在KFC找到possible_in_KFC

在类定义时,括号里为Bird。这说明,Chicken是属于鸟类Bird的一个子类,即Chicken 继承 自Bird。自然而然,Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管只声明了summer是鸡类,但它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)

新定义的黄鹂Oriole类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。

通过继承制度,可以减少程序中的重复信息和重复语句。如果分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。

定义鸟类时括号中的object,当括号中为object时,说明这个类没有父类,到头了,可以把object也看作是一个类,它也有(类的)属性和方法,可以为子类所继承

将各种各样的东西分类,从而了解世界,从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。所谓面向过程,也就是执行完一个语句再执行下一个,更多的是机器思维。通过面向对象的编程,我们可以更方便的表达思维中的复杂想法。

调用类的其它信息

在定义方法时,必须有self这一参数。这个参数表示某一对象,对象拥有类的所有性质,可以通过self,调用类属性。似乎使用在定义类内部方法的时候,类似函数的形参,是这样吗?

 

class Human(object):
    laugh = 'hahahaha'
    def show_laugh(self):
        print(self.laugh)
    def laugh_100th(self):
        for i in range(100):
            self.show_laugh()


li_lei = Human()          
li_lei.laugh_100th()

 

这里有一个类属性laugh。在方法show_laugh()中,通过self.laugh,调用了该属性的值。还可以用相同的方式调用其它方法。方法show_laugh(),在方法laugh_100th中()被调用。

通过对象可以修改类属性值。但这是危险的。类属性被所有同一类及其子类的对象共享。类属性值的改变会影响所有的对象。

__init__()方法

__init__()是一个特殊方法(special method)。Python有一些特殊方法。Python会特殊的对待它们。特殊方法的特点是名字前后有两个下划线。如果你在类中定义了__init__()这个方法,创建对象时,Python会自动调用 这个方法。这个过程也叫初始化

class happyBird(Bird):
    def __init__(self,more_Words):
        print('We are happy birds.',more_words)


summer = happyBird('Happy!Happy!')
# 执行结果
# We are happy birds. Happy!Happy!

我们看到,尽管我们只是创建了summer对象,但__init__()方法被自动调用了。最后一行的语句(summer = happyBird...)先创建了对象,然后执行:

summer.__init__(more_words)

'Happy!Happy!' 被传递给了__init__()的参数more_words

对象的性质

上面讲到了许多属性,但这些属性是类的属性。所有属于该类的对象会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。

在一些情况下,定义对象的性质,用于记录该对象的特别信息。比如说,人这个类。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。这个性质的值随着对象的不同而不同。李雷是人类的一个对象,性别是男;韩美美也是人类的一个对象,性别是女。

当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。比如用类来新建一个对象,即下面例子中的li_lei, 那么li_lei就被self表示。我们通过赋值给self.attribute,给li_lei这一对象增加一些性质,比如说性别的男女。self会传递给各个方法。在方法内部,可以通过引用self.attribute,查询或修改对象的性质。

这样,在类属性的之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。

class Human(object):
    def __init__(self, input_gender):
        self.gender = input_gender
    def printGender(self):
        print(self.gender)

li_lei = Human('male')   # 这里,'male'作为参数传递给__init__()方法的input_gender变量。
print(li_lei.gender)
li_lei.printGender()

# 执行结果
# male
# male

在初始化中,将参数input_gender,赋值给对象的性质,即self.gender。

li_lei拥有了对象性质gender。gender不是一个类属性。Python在建立了li_lei这一对象之后,使用li_lei.gender这一对象性质,专门储存属于对象li_lei的特有信息。

对象的性质也可以被其它方法调用,调用方法与类属性的调用相似,正如在printGender()方法中的调用。

 

 

总结 

嗯,多做总结是个好习惯!!!佩服大神

将东西根据属性归类 -> 将object归为class

方法也是一种属性,如动作

用继承来说明父类-子类关系,子类自动具有父类的所有属性。

self代表了根据类定义而创建的对象。

 

建立一个对象:对象名 = 类名()

引用对象属性:object.attribute

 

通过self调用类属性

__init__():在建立对象时自动执行

类属性与对象属性,即与对象的性质的区别

最后回过头来看看,一切皆对象,"Everything is Object"。

Python基础10 反过头来看看,就这样吧!

 

--结束END--

本文标题: Python学习笔记5——一切皆对象

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

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

猜你喜欢
  • Python学习笔记5——一切皆对象
    我发现我不适合看视频学习,看书看文字觉得更舒服,看大神的博客教程:Python快速教程——这是大神的第一篇博客,点击下一篇,一篇篇看下去,都很通俗易懂,坐看看大神是如何成长的,可以利用碎片时间看,收获很多,不再迷茫。 另外,下面的评论也很...
    99+
    2023-01-30
    学习笔记 一切皆 对象
  • Python学习笔记(5)practic
    2019-02-27 原代码: money = int(input("请输入金额:")) list = ["phone", "clothes", "book", "desk lamp"] list2 = [5000, 200, 35, ...
    99+
    2023-01-30
    学习笔记 Python practic
  • Python学习笔记(5)Timer
    下面的笔记内容来自coursera上的Python公开课。 A good program design principle: I have an u...
    99+
    2023-01-31
    学习笔记 Python Timer
  • 怎么理解Python中一切皆对象
    本篇内容介绍了“怎么理解Python中一切皆对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据类型作为对象所有数据类型,如数字、字符串、...
    99+
    2023-06-16
  • Python学习笔记5—Python模块
        python模块分为系统内置的模块、第三方的模块和用户编写的模块    默认情况下,python第三方的模块安装在python 的安装目录下site-packages下,以文件或者目录的形式存放    用户模块,程序模块化对区分功能...
    99+
    2023-01-31
    学习笔记 模块 Python
  • Redis学习笔记(六) 对象
    前面我们看了Redis用到的主要数据结构,如简单动态字符串(SDS)、双向链表、字典、压缩列表、整数集合等。 但是Redis并没有直接使用这些数据结构来实现键值对,而是基于这些数据结构创建了一个对象系统,这个系统包括字符串对象、列...
    99+
    2021-06-25
    Redis学习笔记(六) 对象
  • 我的Python学习笔记(5) ArcG
    介绍与点评 主要针对ArcGIS Online和 ArcGIS Portal的用户,使用python api能够很方便的完成很多繁琐的功能,并提供一定的展示能力。 主要功能和特点(注意,基本上所有的功能都需要基于Online或...
    99+
    2023-01-31
    学习笔记 Python ArcG
  • Python编程算法中的对象编程:一切皆对象?
    Python是一种面向对象编程语言,这意味着在Python中,一切皆对象。对象编程是一种编程范式,它将数据和数据上的操作封装在一起,形成一个对象。Python中的对象编程为程序员提供了一种更加高效的方式来处理代码和数据。 在Python中...
    99+
    2023-10-16
    编程算法 对象 编程算法
  • 如何在学习笔记中记录 Python Spring 的对象?一起来学习吧!
    Python Spring 是一个非常流行的框架,它可以帮助开发人员快速构建高质量的应用程序。在学习 Python Spring 的过程中,记录笔记是非常重要的一步。本篇文章将向您介绍如何在学习笔记中记录 Python Spring 的对象...
    99+
    2023-08-31
    spring 学习笔记 对象
  • Python万物皆对象理解及源码学习
    目录万物皆对象1 类型对象和实例对象2 类型、对象体系2.1 元类型type2.2 自定义类型2.3 自定义类型子类2.4 type和object的关系3 可变对象与不可变对象4 变...
    99+
    2024-04-02
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • python学习笔记:第16天 面向对象
    目录 ⼀、类的成员介绍: 二、类的成员-变量 三、类的成员-方法 四、类的成员-属性 五、私有属性 ...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • python学习笔记:第17天 面向对象
    一、类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 中存在以下关系: 依赖关系 关联关系...
    99+
    2023-01-30
    面向对象 学习笔记 python
  • Python 3 学习笔记:面向对象编程
    概述 面向对象编程(Object Oriented Programming,即 OOP),是一种程序设计思想,比面向过程编程更加灵活,更易扩展。 Python 在设计的时候就是按照面向对象编程的思想设计的,像我们前面学过的各种数据类型,如字...
    99+
    2023-01-31
    面向对象 学习笔记 Python
  • 第一周Python学习笔记
     Python 基本语法: ①  Python程序的格式:1.用代码高亮来标识函数丶语句等等 本身的代码高亮并没有实际的意义,只是用来辅助编程人员和阅读人员 更好的识别    2.程序以缩进来标识语句,缩进用来标识代码间的层次关系,缩进的...
    99+
    2023-01-30
    学习笔记 第一周 Python
  • Python学习笔记:第一天python
    目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据...
    99+
    2023-01-30
    学习笔记 Python python
  • Python学习笔记一(Python数据
    Python数据类型主要包括数字,字符串,列表,元组和字典。字符串,列表,元组和字典都是序列,序列最主要两个特点是索引操作和切片操作,索引操作让我们从序列中抓取一个特定项目,切片操作让我们能够获取序列的一个切片,即一部分序列。1.数字 ...
    99+
    2023-01-31
    学习笔记 数据 Python
  • OC runtime学习笔记之关联对象
    前言 Objective-C 不能动态的添加一些属性到对象上,和其他的一些原生支持这点的语言不一样。所以之前你都不得不努力为未来要增加的变量预留好空间。在 Mac OS X 10.6...
    99+
    2022-05-18
    oc runtime 关联对象
  • 打包 Java 对象:学习笔记分享
    Java 是一种常用的编程语言,开发者们常常需要将自己编写的 Java 对象打包成可执行的 JAR 文件。本文将分享一些打包 Java 对象的经验和技巧,以便于读者能够更加轻松地完成这项任务。 一、什么是 JAR 文件 JAR 文件是 J...
    99+
    2023-10-04
    打包 对象 学习笔记
  • Java 打包对象:学习笔记分享
    Java 是一门面向对象的编程语言,它的面向对象特性使得 Java 开发者可以轻松地组织代码和数据。但是,在编写代码的过程中,我们经常需要将一组相关的对象打包在一起进行处理。这就是 Java 打包对象的重要作用。本文将会分享 Java 打...
    99+
    2023-10-03
    打包 对象 学习笔记
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作