一、面向对象的定义

  说到面向对象,我们先来看一下面向过程的定义:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。优点:降低了程序的复杂度,使得程序的运行过程变得直观明了。缺点:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。

  面向对象的定义:面向对象的程序设计的核心是对象,万物皆对象。优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

二、类和对象

  类是一个抽象的概念,是把一类事物的想的特征和动作整合到一起。对象是基于类而创建出来的一个个具体的'对象',也是特征和动作整合到一块。必须牢记类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

三、定义类

  在Python中,定义类是通过class关键字:

class Student(object):  #类名首字母要大写,object为继承对象
pass

>>> bart = Student()   #创建创建出Student的实例
>>> bart
<__main__.Student object at 0x0000000002F12EB8>  #变量bart指向的就是一个Student的实例,后面的0x10a67a590是实例的内存地址
>>> Student
<class '__main__.Student'>

  下面来看一个具体的例子:

class Student(object):
   ability = '优秀'
def __init__(self, name, score):
self.name = name
self.score = score def ask_questions(self):
print('{0}正在问数学问题'.format(self.name)) def examination(self):
print('{0}考试的成绩为{1}'.format(self.name,self.score)) student1 = Student('XiaoMing',90,) #类的实例化
print(student1.__dict__) #查看实例属性
print(Student.__dict__) #查看类属性
student1.ask_questions() #实例调用类的函数属性,实例没有函数属性,只能调用类的函数属性
print(student1.ability) #访问类的数据属性

  1.类的函数属性中所传入的self其实就是实例本身(student1)

  2.实例调用的是类的函数属性,实例没有函数属性,只能调用类的函数属性

  3.实例在调用数据属性的时候如果在__init__里找不到,那么就会向上一层找,再找不到就不报错

  类属性的增删改查

class Student(object):
ability = '优秀'
def __init__(self, name, score):
self.name = name
self.score = score def ask_questions(self):
print('{0}正在问数学问题'.format(self.name)) def examination(self):
print('{0}考试的成绩为{1}'.format(self.name,self.score)) student1 = Student('XiaoMing',90,) #类实例的实例化
print(Student.ability) #查看 Student.ability = '良好' #修改
print(Student.ability) Student.sport = 'basketball' #增加
print(Student.sport)
print(Student.__dict__) #查看属性字典中是否增加了sport这一项 del Student.sport #删除
print(Student.__dict__) #查看属性字典中是否删除了sport这一项
print(Student.sport) #AttributeError: type object 'Student' has no attribute 'sport'

  实例属性的增删改查

class Student(object):
ability = '优秀'
   L = ['a','b']
def __init__(self, name, score):
self.name = name
self.score = score def ask_questions(self):
print('{0}正在问数学问题'.format(self.name)) def examination(self):
print('{0}考试的成绩为{1}'.format(self.name,self.score)) student1 = Student('XiaoMing',90,) #类实例的实例化
print(student1.ability) #查看 student1.name = 'XiaoHua' #修改
print(student1.name) student1.sport = 'basketball' #增加
print(student1.sport)
print(student1.__dict__) #查看属性字典中是否增加了sport这一项 del student1.sport #删除
print(student1.__dict__) #查看属性字典中是否删除了sport这一项 #输出:
优秀
XiaoHua
basketball
{'name': 'XiaoHua', 'score': 90, 'sport': 'basketball'}
{'name': 'XiaoHua', 'score': 90}

  补充:

  在上面调用student1.L.append('c'),此时改的是类的L,因为实例student1中根本没有这个属性。

  但是如果是student.L = ['q','w','e'] 此时相当于新增了一个实例的L属性列表,对类的数据属性中的L并不会产生任何影响

  注意:新增属性是通过赋值操作来完成的。

025--python初识类和对象的更多相关文章

  1. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  2. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  3. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  4. 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象

    4类和对象 在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下: 从本章开始,我们一点一点 ...

  5. Python基础之初识类和对象

    我们在前面学习了解了面向过程编程,接下来我们一起来学习一下面向对象编程.其实不管是面向过程,还是面向对 象,说白了就是一种编程方式而已.既然是面向对象编程,顾名思义,此编程方式的落地需要使用 “类” ...

  6. python基础-第七篇-7.1初识类和对象

    创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...

  7. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  8. python的类和对象——番外篇(类的静态字段)

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  9. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  10. Python 定制类与其对象的创建和应用

    1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...

随机推荐

  1. cart树剪枝

    当前子树的损失函数: $C_a(T) = C(T) + a|T|$, 其中$C(T)$为对训练数据的预测误差,$|T|$为树的叶子结点数目,反映模型的复杂度.对固定的$a$,一定存在使损失函数$C_a ...

  2. poj 3169 Layout(差分约束)

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6549   Accepted: 3168 Descriptio ...

  3. stream_context_create()模拟POST/GET

    有时候,我们需要在服务器端模拟 POST/GET 等请求,也就是在 PHP 程序中去实现模拟,该怎么做到呢?或者说,在 PHP 程序里,给你一个数组,如何将这个数组 POST/GET 到另外一个地址呢 ...

  4. HTML初体验

    ios讨论群1群:135718460 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比"文本"更丰富 ...

  5. poj1703 Find them,Catch them 【并查集】

    做过一些的带权并查集,再来做所谓的"种类并查集",发现好像就顿悟了. 种类并查集与带权并查集实质上的区别并不大. 关键的区别就是种类并查集仅仅是带权并查集再弄个%取余操作而已.然后 ...

  6. 项目Beta冲刺(团队2/7)

    项目Beta冲刺(团队2/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...

  7. 值得收藏的45个Python优质资源(附链接)

    REST API:使用 Python,Flask,Flask-RESTful 和 Flask-SQLAlchemy 构建专业的 REST API https://www.udemy.com/rest- ...

  8. sanic官方文档解析之静态文件和版本

    1,静态文件 就向图片文件一样,静态文件和指导性的文件,当通过Sanic服务端用app.static()方法注册的时候,这种方法采用端点url和文件名称获得.这样的文件的指定,将会通过指定的端点访问. ...

  9. curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused

    今天我用curl命令,无论如何都是出现: curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused 找了很久,不知道 ...

  10. 使用TASM编译COFF格式和连接

    看到网络上流传的一份Drocon的mercury的代码程序源码使用TASM32编译使用MASM32来连接...关键的地方就在这里为什么要使用TASM编译...正常情况下TASM连接出来的程序代码体积远 ...