025--python初识类和对象
一、面向对象的定义
说到面向对象,我们先来看一下面向过程的定义:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。优点:降低了程序的复杂度,使得程序的运行过程变得直观明了。缺点:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身。
面向对象的定义:面向对象的程序设计的核心是对象,万物皆对象。优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死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初识类和对象的更多相关文章
- Python初识类与对象
Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- python的类和对象2(self参数)
python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...
- 《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
4类和对象 在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下: 从本章开始,我们一点一点 ...
- Python基础之初识类和对象
我们在前面学习了解了面向过程编程,接下来我们一起来学习一下面向对象编程.其实不管是面向过程,还是面向对 象,说白了就是一种编程方式而已.既然是面向对象编程,顾名思义,此编程方式的落地需要使用 “类” ...
- python基础-第七篇-7.1初识类和对象
创建类和对象 刚开始我们接触得多的编程方式为面向过程编程,这种方式就是根据业务逻辑从上往下垒代码,后来又出现了函数式编程,就是为了提高代码的重用性,减轻程序猿的工作量--而今天我们即将学的 面向对象编 ...
- python的类与对象
类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...
- python的类和对象——番外篇(类的静态字段)
什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...
- python的类和对象——进阶篇
写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...
- Python 定制类与其对象的创建和应用
1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...
随机推荐
- Mysql 性能优化20个原则(4)
16. 垂直分割 “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段,很恐怖) 示例一:在 ...
- 一次mysql优化经历
某日运维突然说无线终端的频道页接口訪问量非常大,memcache缓存扛只是来.导致mysql并发查询量太大,导致server不停地宕机,仅仅能不停地重新启动机器.遗憾的是运维并没有告诉mysql查询量 ...
- zoj 3573 Under Attack(线段树 标记法 最大覆盖数)
Under Attack Time Limit: 10 Seconds Memory Limit: 65536 KB Doctor serves at a military air f ...
- HDOJ 1217 Arbitrage(拟最短路,floyd算法)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- Android Studio 一些方便使用的设置
相信非常多使用Eclipse的朋友,開始用Android Studio都是认为不是特别方便, a:比方怎样使鼠标放到方法上面,就有提示用法; b:怎样设置字体大小,和背景色; c:还有怎么查看Outl ...
- 【转载】.NET Remoting学习笔记(一)概念
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 背景 自接触编程以来,一直听过这个名词Remotin ...
- Spyder的汉化
我准备写下spyder的汉化问题:对于英文大佬,从来没得汉化问题,但是对于新手和英语差的来说,汉化还是有必要,至少用汉化过得软件能快速掌握软件等.后期会用软件了在慢慢习惯英文也不迟...哈哈哈哈.本文 ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 代码实现
http://blog.csdn.net/mianhuantang848989/article/details/38035731 http://www.61ic.com/Article/DaVinci ...
- Struts2的配置文件——web.xml
任何MVC框架都需要与Web应用整合,这就不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载. 通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于S ...
- Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go? | Hacker News https://news.ycombinator.com/i ...