一、面向对象的定义

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

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

    在AndroidManifest.xml 中activity 中添加 android:configChanges="orientation|screenSize|smallestScreen ...

  2. Elasticsearch shield权限管理详解

    Elasticsearch shield权限管理详解 学习了:https://blog.csdn.net/napoay/article/details/52201558 现在(20180424)改名为 ...

  3. leetCode 65.Valid Number (有效数字)

    Valid Number  Validate if a given string is numeric. Some examples: "0" => true " ...

  4. C语言使用以及其它语言经常出的错误

    1. 计算优先级 i/*pi/(*p) //默认即用“()”花括号分隔即可 2.分号结束 ; ; if(i<j);{ //code } //分号结束必须看清楚 3.声明变量 ; ; //声明变量 ...

  5. NAND FLash基础概念介绍

    一.引脚介绍 引脚名称 引脚功能 CLE 命令锁存功能 ALE 地址锁存功能 /CE 芯片使能 /RE 读使能 /WE 写使能 /WP 写保护 R/B 就绪/忙输出信号 Vcc 电源 Vss 地 N. ...

  6. Java类载入器(二)——自己定义类载入器

      用户定制自己的ClassLoader能够实现以下的一些应用: 自己定义路径下查找自己定义的class类文件,或许我们须要的class文件并不总是在已经设置好的Classpath以下,那么我们必须想 ...

  7. stl_内存基本处理工具

    内存基本处理工具 STL定义5个全局函数.作用于初始化空间上.各自是:用于构造的construct(),用于析构的destroy(),uninitialized_copy(),uninitialize ...

  8. 第六十题(在O(1)时间内删除链表结点)

    题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 思路:将待删除节点下一个节点的数据赋给当前节点.删除下一个节点就可以.

  9. linux输入子系统(6)-input子系统介绍及结构图

    注:本系列转自: http://www.ourunix.org/post/290.html input子系统介绍         输入设备(如按键,键盘,触摸屏,鼠标,蜂鸣器等)是典型的字符设备,其一 ...

  10. 嵌入式开发之davinci--- 8168 question about capture PAL on 8168

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/t/340483.aspx?pi199607=2