美文网首页
抽象行为和状态

抽象行为和状态

作者: Mr旺旺 | 来源:发表于2019-01-31 01:03 被阅读0次

Python中创建和使用类:

使用类允许你将行为状态打包放在一个对象中。

行为(方法):把它想成是函数,这是一个完成某种工作(或实现一种行为)的代码块;

状态(属性):把它想成是变量,这是一个在类中存储值的位置;

我们说将行为和状态打包在一起,就是在说一个类包装了函数和变量。

由类创建对象:

要使用一个类,需要从何类创建一个对象,这称为对象实例化(调用),就是说你要调用一个类来创建一个对象:

创建一个名为CountFromBy的空类,类名前class为关键字,注意冒号,然后提供代码组;这里pass是一个合法的语句,虽然什么也不做,但是我们不能不写语句,否则解释器会报错

到这里,类已经存在,下面从这个类创建对象:

在类名后加小括号来创建一个对象,然后将新创建的对象赋给某个变量:a,b,c

从创建对象看起来与调用函数非常相似。Python编程社区有一个普遍认可的约定:函数用小写字母命名,并且有下划线来强调,而类名用CamelCase形式命名,即单词拼接在一起,而且各个单词的首字母大写。所以很清楚count_from_by()是一个函数调用,CountFromBy()是创建一个对象

我们希望CountFromBy做什么?:递增计数器

递增计数器源代码

调用方法:

c.increase() <==>CountFromBy.increase(c)

上面右边是解释器遇到左边的代码时在后台执行的代码,咋一看,解释器这种转换有些奇怪,实际上,Python编程社区中一种约定俗成的方法是各个方法的第一个参数指定一个特殊的名字:self.编写代码时可以把"self"想成是当前对象的一个别名。在对象上调用一个方法时,Python会把调用对象实例作为第一个参数,这个对象总是赋给各个方法的self参数。调用一个方法时,不需要为self提供一个值,因为解释器会为你做这件事情。


increase方法代码

假设这个类维护两个属性:val和incr,val为当前对象的当前值,incr包含每次调用increase时val的增量。我们不能直接写成:val += incr.     这是为什么?

对象共享行为,但不共享状态:

类行为会由它的各个对象共享,而状态不能共享,每个对象会维护其自己的状态。表面看这行代码没什么问题,不过想想看这个increase方法结束时会发生什么:val和incr都只是存在于increase中,它们会超出其作用域,因此方法结束的瞬间它们就会被撤销。

如果要引用类中的一个属性,必须在属性名面前加上一个self.  self中的值是一个别名,指示调用这个方法的对象。



dunder init行代码

使用前要初始化属性值:

在Python中,不论在哪里使用变量,都必须首先用一个初始值初始化:dunder "init"初始化属性 使用规则在代码中足以体现。由于__init__是一个方法,方法就是一个伪装的函数,所以可以向方法传入你希望的任意多个参数值,你要做的就是提供参数名。


dunder repr行代码

假设我们没有这段代码,按F5运行程序:

出现的结果

我们试图访问h的值时,解释器变得异常。

我们使用dunder repr的意图:返回对象的标准字符串表示 

使用后,解释器能正常显示我们需要得到的结果:

测试1 测试2 测试3 测试4,比较特殊

至此,我们对类有了足够的了解,使我们能够创建代码来挂接Python的上下文管理协议。

by PengSW_10 on 2019/1/30

相关文章

  • 抽象行为和状态

    Python中创建和使用类: 使用类允许你将行为和状态打包放在一个对象中。 行为(方法):把它想成是函数,这是一个...

  • 状态模式

    概念   状态模式,就是和对象的 状态相关的行为型模式。根据状态的不同,类的行为也不同。 角色 抽象状态类:定义了...

  • 08 抽象类与接口

    抽象类 抽象类代表了一种优化了的概念组织方式,来描述事物的一般状态和行为,然后在子类中去实现这些状态和行为,以适应...

  • Head First Python 读书笔记(六)

    类:抽象行为和状态 类:将行为和状态打包在一个对象中 采用驼峰命名法 self解读类似于其他语言中的this类中方...

  • MVVM架构—实现数据双向绑定

    1、MVVM MVVM 模式,即指 Model-View-ViewModel。它将 View 的状态和行为完全抽象...

  • 第一章笔记《Thinkinng in JAVA》

    第一章 对象导论 1.1 抽象过程 类 class 实例 instance 对象具有状态、行为和标识 1.2 每个...

  • 接口与抽象类

    抽象类是对整体的抽象(包括行为和属性),接口是对局部的抽象(行为),不能对属性抽象抽象类是自底向上抽象而来的,接口...

  • 《Head First Python》Ch8:一点点类:抽象行为

    本篇引用原文链接:【跟着Head First学python】8、一点点类:抽象行为和状态[https://blog...

  • 接口和抽象类

    抽象类用来抽取子类的通用特性包括属性和行为,而接口对行为进行抽象 将类的共同方法和属性再抽象出来就是抽象类,比如人...

  • Java 对象和类

    一、基本概念多态继承封装抽象类对象实例方法重载二、 java中类的对象 软件对象也有状态和行为。软件对象的状态就是...

网友评论

      本文标题:抽象行为和状态

      本文链接:https://www.haomeiwen.com/subject/jpbhsqtx.html