一、面向对象的定义

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

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

    Record 和Packed Record 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对 ...

  2. python之入门,你好,中国

    print("你好,中国") 可以运行py文件实现一样的效果(py文件编码一定要是utf-8编码) 你好中国基础教程结束!

  3. DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1

    DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1 AspxCheckBox 是一个检查编辑控件去展示特殊条件是否关闭或者打开.它一般会展示Yes/N ...

  4. node 爬虫 --- 批量下载图片

    步骤一:创建项目 npm init 步骤二:安装 request,cheerio,async 三个模块 request 用于请求地址和快速下载图片流. https://github.com/reque ...

  5. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

  6. POJ 1151 HDU 1542 Atlantis(扫描线)

    题目大意就是:去一个地方探险,然后给你一些地图描写叙述这个地方,每一个描写叙述是一个矩形的右下角和左上角.地图有些地方是重叠的.所以让你求出被描写叙述的地方的总面积. 扫描线的第一道题,想了又想,啸爷 ...

  7. 原生js实现悬浮框滑动动画

    最近在做个人博客想做个相册,鼠标悬浮后出现个div并且鼠标移动到哪个相册,div跟随到哪个相片上. <!DOCTYPE html> <html lang="en" ...

  8. SGU 194 Reactor Cooling 无源汇带上下界可行流

    Reactor Cooling time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard output ...

  9. java之集合Collection 具体解释之4

    package cn.itcast_04; public class Student { private String name; private int age; public Student() ...

  10. coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面&amp;全新的3.0物理世界

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 ...