编程日常::::
#编程就是程序员用特定的语法加数据结构加算法在计算机上执行过程,方式有很多种,最常用的就是面向对象编程和面向过程编程
#设计思路一开始解决一个大问题,然后把大问题分解成小问题,一步步解决小问题
#面向对象编程方式:利用类和对象创建各种模型来对真实世界的描述
#只要是一个对象,就肯定属于某种品类;只要是对象,一定有属性(也就是功能的意思)
# 类>对象>属性
#特性
class类 :一个类拥有相同属性的对象的抽象,共同的方法
object对象:一个对象即是一个类实例化的实例,一个类必须讲过实例化方可在程序中调用就像人类,每一个都是独立的对象,人与人也有相同的特性,亦有不同
#封装:在类中对数据复制
#继承:一个类可以派生出子类
#多态:“一个接口,多个实现”
#oop编程方式(面向对象)
1,重复写代码是非常不好的行为
2,写的代码要经常变更
简单来说:
  面向对象在python中应用是最多的,同时也是不可缺少的,简单理解类和对象的关系,举个例子:假设人类是一个类,那么每一个个体的人就是对象,同时也有相同的特征和不同的特征
  类包含对象的属性,对象是每一个类的实例化体现

概念理解的差不多,不如动手实际动手试试

实 际 操 作

  要求:简化CS游戏,先创建两个人物,分别给他们不同的属性,同时也赋予他们相同的属性(比如说生命值)还有一些功能(死亡和买枪复活)
  
  思路:首先,我们根据要求,先建立一个类,来定义人物的属性,并给这个类添加功能,最后定义两个人物变量来调用这个类
 1,如图(先定一个类):
  
我们可以通过代码看到:Role是类,里面定义了(name,role,weapon,life_value,money)这几个人物属性,并在下面通过三个函数来完成人物功能的操作
2,如图,添加两个人物调用Role并赋值

3,那么该如何调用呢?,这里的r1和r2代表两个人物,上图虽然已经加了参数,但是执行后没有任何内容,这时候我们把#号注释去点看看效果

我们可以看到,Role类被调用,并赋予了r1人物的参数,然后实现了两个函数的功能(死亡和复活)

4,如果我们要改名如何呢?假设我们改r1人物Alex名

对类不做修改,只在最后调用时修改即可,可是问题来了,在此处将类中的name变量改变是没有问题,也就改了名字,但是如果类变量也改变呢?

5,如图,我们再给类添加一个(name = 123)的变量(简称类变量)

如果这样添加,那按第4 步我们修改r1的人名,会不会和类里的变量name冲突呢?我们来执行看一下

发现并没有冲突,类的变量虽然也是name,类中实例的变量也是name,但是在修改实例变量时并没有因为变量名相   同而冲突,这是为什么呢?很简单,因为我们在修改实例变量后调用,其实也是实例的产生,根据实例的产生过程来说,实例在创建时,先找实例本身里的属性(变量),如果没有,再去找类的变量。

6,那么如果 r1 中修改类的变量,r1 和 r2 同时打印类变量,会不会影响r2 的类变量打印呢?

如图:我们在r1中修改类变量( n ) 将 在类中 n 的值“123” 改成 “456”,并打印 r1 和 r2 的结果

我们可以看到,r1 的打印成功将n 改变, r2 也没有因为r1修改类的变量而改变,这是为什么呢?因为看似我们将类的变量做了修改,其实根本就没有将类变量做修改,只是将内存r1中的类变量做了修改,所以不会影响到其他实例。


经过以上问题的测试,我们可以利用以上方法,运用到工作中。

  例如:当我们遇到多数对象调用一个类,并且类中一个或多个属性都会被对象调用,按实例化的过程来看,每一个对象实例时都会调用类中的属性来完成,这样会造成大量内存资源浪费;我们完全可以把相同的属性,写到类的变量里,不必再写到实例变量里,这样,就可以节省资源。

如图:

这里将原本在实例变量里的money 和 value 写道类变量一行(上面)  ,打印r1 和r2,执行一下

: ok


类的用法还有很多,通过以上几种实践,可以清楚的认识对象在调用类时的过程。并且利用类的特性,可以对对象的不同应用,来达到优化的目的,节省资源。


 


python面向对象--类的刨析的更多相关文章

  1. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  2. python 面向对象(类的特殊成员)

    python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...

  3. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  4. python 面向对象(类)

    面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...

  5. python面向对象——类

    from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...

  6. Python面向对象 --- 类的设计和常见的内置方法

    面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...

  7. python 面向对象类与类之间的关系

    主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...

  8. Python——面向对象(类)的基础疑难点

    相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...

  9. python面向对象--类

    1.类的概念:简单来说就是一组符合逻辑的参数或者是函数,一个种类.一个模型. 一个类中可以包含任意参数,并且可以定义任意个方法,但类并不是随意的将多个参数或者方法包含在class下,而是创建一个在事物 ...

  10. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

随机推荐

  1. 码云或github的"免费服务器"

    目录 一. 码云及工具介绍 二. 操作步骤 (1) 创建vue-cli项目 (2) 码云创建仓库 (3) 修改并提交项目到码云仓库 (4) 运行项目 (5) 注意点 三. 尾声 对于学生党来说,买个服 ...

  2. 数据类型之字符串(string)(一)

    1.引号括起的都是字符串(可以时空格),可以是''(单引号).""(双引号).''''''(三引号).""""""(我还 ...

  3. elementUi-2.13.2版本添加暂无数据

    1.实现效果如下: 2. 代码实现 <el-table empty-taxt="暂无数据"></el-table> css样式设置: .el-table__ ...

  4. csp201503-2(数字排序)

    问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输入格式 输入的第一行包含一个整数n,表示给定数字的个数. 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所 ...

  5. 基于AD9361的双收双发射频FMC子卡

    FMC177-基于AD9361的双收双发射频FMC子卡 一.板卡介绍 FMC177射频模块分别包含两个接收通道与发射通道,其频率可覆盖达到70MHz~6GHz,AD9361芯片提供具有成本效益的实验平 ...

  6. Charles 抓包教程(Mac版)

    Charles 抓包使用教程 (Mac版) Charles简介 Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以 ...

  7. (前端面试题)详解 JS 的 setTimeout 和 setInterval 两大定时器

    程序员面试题库分享 1.前端面试题库 (面试必备)            推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全      推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...

  8. # huawei--流策略+NAT+单臂路由

    huawei--流策略+NAT+单臂路由 项目要求: 公司内部有两个网段,分别为192.168.1.0/24和192.168.2.0/24,使用路由器R1实现单臂路由,并配置流策略,使192.168. ...

  9. Qt头文件引用其他类,主类头文件报错(1)invalid use of incomplete type 'class xx::yy' (2)forward declaration of 'class xx::yy'

    其实这个错误很蠢,由于代码是从cpp文件直接copy过来的就没仔细看,但是他这个报错很有迷惑性,我们来看图: 就这行代码,从cpp文件中复制过来的: 本来目的呢就是提升这个变量的作用域,但是呢!!!在 ...

  10. Appium+RobotFrameWork测试环境搭建

    前提:搭建好robotframework环境 RF基于python2.7的版本实现的一套开源自动化测试框架 推荐使用Appium Desktop, 搭建Appium环境: 1. 搭建JDK 2. 搭建 ...