python面向对象--类的刨析
编程日常::::
#编程就是程序员用特定的语法加数据结构加算法在计算机上执行过程,方式有很多种,最常用的就是面向对象编程和面向过程编程
#设计思路一开始解决一个大问题,然后把大问题分解成小问题,一步步解决小问题
#面向对象编程方式:利用类和对象创建各种模型来对真实世界的描述
#只要是一个对象,就肯定属于某种品类;只要是对象,一定有属性(也就是功能的意思)
# 类>对象>属性
#特性
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面向对象--类的刨析的更多相关文章
- python面向对象(类和对象及三大特性)
类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(类的特殊成员)
python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
- python 面向对象(类)
面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...
- python面向对象——类
from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...
- Python面向对象 --- 类的设计和常见的内置方法
面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...
- python 面向对象类与类之间的关系
主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...
- Python——面向对象(类)的基础疑难点
相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...
- python面向对象--类
1.类的概念:简单来说就是一组符合逻辑的参数或者是函数,一个种类.一个模型. 一个类中可以包含任意参数,并且可以定义任意个方法,但类并不是随意的将多个参数或者方法包含在class下,而是创建一个在事物 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
随机推荐
- C++ MFC学习 (四)
对话框 创建MFC应用程序时,选择对话框 可使用向导创建对应的对话框的类 1 // MFC_Demo2Dlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h&q ...
- springboot AOP配置
在Springboot中添加AOP配置分两步: 最近学习AOP ,记录一下,虽然很多名字不太清楚,但是问题不大 1:在pom.xml中添加AOP依赖 2:建一个AOP配置类 下面来看下代码是怎么实现的 ...
- 档案系统区块链集成 leveldb.net集成
leveldb.net工作原理:leveldb为键值对数据库,具有增加,删除,查询功能,利用加密链式结构存储和查询数据. 区块(block):在区块链技术中,数据以电子记录的形式被永久储存下来,存放这 ...
- list变成String类型
list变成String类型 CollectionUtils.isEmpty(vo.getImgs())?"" : String.join(";", (Stri ...
- mybatis-generator插件的使用及相关配置
mybatis-generator主要用于逆向工程,根据数据库来生成实体类以及mapper映射文件 1.第一步先添加依赖 <dependency> <groupId>mysql ...
- Lnmp切换PHP版本
进入lnmp的安装目录 cd /root/lnmp1.8 执行 ./install.sh mphp 然后选择你要变更的版本
- cenots7 rpm 包升级ssh
rpm下载地址 也可以自行官网下载 链接: https://pan.baidu.com/s/1S945MehpmZbIriKK6l7Sfw 提取码: y5ua centos7rpm包升级ssh 逻辑思 ...
- JetCache源码整理
- JAVA笔记_方法递归调用
方法递归调用 简单地说递归调用就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂问题,同时可以让代码变得更加简洁. 递归调用执行机制案例1: /** * @ClassName ...
- Selenium私房菜系列8 -- 玩转Selenium Server【OO】
本篇主要是想更进一步介绍Selenium Server的工作原理,这次我们从Selenium Server的交互模式开始. 在<第一个Selenium RC测试案例>中,我们以命令&quo ...