第七章面向对象

1、面向过程编程核心是”过程“二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式

优点:复杂的问题流程化、进而简单化​ 缺点:可扩展性差

2、面向对象核心”对象“二字,对象指的是特征(变量)与技能(函数)的结合体,需要创造出一个个的具体存在的对象,程序的执行就是由对象直接交互完成

优点:可扩展性强​ 缺点:编程的复杂度高于面向过程

7.1 类

7.11 定义类

1、类:对象是特征与技能的结合体,那类就是一系列对象相似的特征与技能的结合体

2、在现实世界中:一定先有对象,后来随着人类文明的发展总结出的类,对象是具体存在的,而类只是一种抽象概念

3、在程序中,务必保证:先定义类,后调用类来产生对象

classOldboyStudent:

school="Oldboy" #对象们相似的特征

def learn(self): #对象们相似的技能

print('is learning...')

注意:在类定义阶段就会立刻执行类体代码,会产生类的名称空间,将执行类体代码过程中产生的名字存放于类的名称空间

如何查看:

print(OldboyStudent.__dict__) #查看类的名称空间,以字典形式显示

​print(OldboyStudent.__dict__['school']) #Oldboy

print(OldboyStudent.school) #Oldboy

​print(OldboyStudent.__dict__['learn']) #

print(OldboyStudent.learn) #

OldboyStudent.__dict__['learn'](123) #is learning...

OldboyStudent.learn('xxx') #is learning...

OldboyStudent.country='China' #增

OldboyStudent.school='偶的博爱' #改

del OldboyStudent.country #删

​print(OldboyStudent.__dict__)

7.12 调用类产生对象

classOldboyStudent:

school="Oldboy" #用变量表示特征

def __init__(self,name,age,sex): #self=stu1 name= "马冬梅" age=18 sex="female"

self.name=name #stu1.name = "马冬梅"

self.age=age #stu1.age = 18

self.sex=sex #stu1.sex = "female"

def learn(self): #用函数表示技能

print('is learning...',self)

​defchoose(self):print('choose course...')

调用类发生哪些事:

1、首先会产生一个空对象stu12、会自动触发类内部的__init__函数3、然后将空对象stu1连同调用类时括号内的参数组成(stu1,"马冬梅",18,'female'),将这四个参数一起传给__init__函数

初始化创建对象过程中,设置对象特征

stu1=OldboyStudent("马冬梅",18,'female') #OldboyStudent.__init__(stu1,"马冬梅",18,'female')

stu2=OldboyStudent("甜蜜蜜",21,'male') #OldboyStudent.__init__(stu2,"甜蜜蜜",21,'male')

stu3=OldboyStudent("原石开",22,'male')print(stu1.name,stu1.age,stu1.sex)print(stu2.name,stu2.age,stu2.sex)print(stu3.name,stu3.age,stu3.sex)

初始化创建对象过程后,设置对象特征

stu1=OldboyStudent()

stu1.NAME='马冬梅'stu1.AGE=18stu1.SEX="female"​print(stu1.NAME,stu1.school)

调用类---》产生类的对象,该对象也可以称为类的一个实例,调用类的过程也称为类的实例化

7.13 类名称空间和对象名称空间

#school='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

classOldboyStudent:#school='oldboy'

name='axaxaxaxxaaxs'

def __init__(self,name,age,sex):

self.name=name

self.age=age

self.sex=sex

stu1=OldboyStudent('李三胖',18,'male') #OldboyStudent.__init__(stu1,'李三胖',18,'male')

print(stu1.name) #stu1对象的名称空间和类的名称空间都有name时优先自己的 #李三胖

print(stu1.school) #stu1对象的名称空间没有school时,到类的名称空间查找 oldboy

#类的名称空间没有时报错

对象属性的查找顺序 : 先找对象自己的名称空间----》类的名称空间

7.14 绑定方法的特殊之处

classOldboyStudent:deflearn(self):print('%s is learning' %self.name)

1.类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址

print(id(stu1.school)) #2143429964384

print(id(stu2.school)) #2143429964384

print(id(OldboyStudent.school)) #2143429964384

2.类内部定义的函数,类可以使用,但类来用的时候就是一个普通函数,普通函数有几个参就传几个参数

print(OldboyStudent.learn) #

OldboyStudent.learn(stu1) #李三胖 is learning

3.类内部定义的函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法,内存地址都不一样,但其实指向同一个功能

print(stu1.learn)#>

print(stu2.learn)#>

绑定方法的特殊之处在于:

1、 绑定给谁就应该由谁来调用2、谁来调用就会把谁当做第一个参数传入,但也可以有其他参数

stu1.learn() #OldboyStudent.learn(stu1) #李三胖 is learning

stu2.learn() #OldboyStudent.learn(stu2) #王大炮 is learning

7.15 创建对象计数器

classFoo:

n=0def __init__(self):

Foo.n+=1 #不要写成 self.n+=1

obj1=Foo()

obj2=Foo()

obj3=Foo()print(obj1.__dict__) #{}

print(obj2.__dict__) #{}

print(obj3.__dict__) #{}

​print(obj1.n) #3

print(obj2.n) #3

print(obj3.n) #3

View Code

python怎么定义名称_python 之 面向对象基础(定义类、创建对象,名称空间)相关推荐

  1. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  2. Python快速入门(八)面向对象1:类、对象和封装

    Python快速入门(八)面向对象1:类.对象和封装 1.类和对象 1)类的定义 2)对象的定义 3)类和对象的关系 4)类的设计 2.第一个面向对象案列 代码1 代码2 3.设置对象属性 4.ini ...

  3. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  4. python中函数的定义包括_python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  5. 2sin30°在python中如何表示_Python学习之基础练习(1)

    基础很重要 万丈高楼平地起,不打好地基,能力的提升是很难的,这一点,我深有体会.之前我直接进行爬虫的编写,虽然能爬取到一些信息,但是,更深层次的功能我却无法自行编写,说到底,还是基础太薄弱了.因此,多 ...

  6. python语言中函数在调用前必须先定义吗_Python函数必须先定义,后调用说明(函数调用函数例外)...

    java开发者在定义类中的方法时,不会关心方法的定义相对于调用语句的位置. 但是python中需要注意: 函数必须先定义.后调用(函数调用函数例外). 如下为示例说明: 1.python函数的应用一般 ...

  7. python if高级用法_Python高级用法总结--元类

    type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义,而是运行时动态创建的. 比方说我们要定义一个 Hello 的 class ,就写一个hello.py 模块: class ...

  8. python类的构造方法名称_Python的面向对象、Class 概念与使用

    Class(类)的基本概念: 类:将同一种具体事务的共同点抽象出来的表现,Python的类是一种可调用对象. 类中定义的有方法,变量,数据结构. 变量则是类属性本身是没有数据的,只有在实例化的时候将数 ...

  9. python有哪些知识_Python有哪些基础知识

    Python基础知识:1.引用和对象:2.可变数据类型和不可变数据类型:3.引用传递和值传递:4.深拷贝和浅拷贝:5.基本数据类型:6.关键字.标识符和内置函数:7.算术.赋值运算符等等. 相关学习推 ...

最新文章

  1. python 错误代码_PYTHON错误代码及解决办法
  2. PHPweb应用程序开发技巧
  3. C#输出带有换行符的字符串
  4. C++多线程编程(2) 条件变量与原子操作
  5. 001 python接口 get请求
  6. Altium AD20大电流表层开窗,用特殊粘贴复制平面区域到其他层,阻焊开窗显示沉金LOGO
  7. 一文看尽 TensorFlow“奋斗史”!| CSDN 博文精选
  8. 第一个mybatis项目
  9. veu的常用指令(复习使用)
  10. comparison of VLIW and superscaler
  11. python 多元字符多项式的展开问题
  12. Simon Game实现过程记录
  13. 关键词词云怎么做_做关键词分析,我有4款免费词云工具
  14. Gspay 和 95epay
  15. JavaScript-页面布局-div布局-盒子模型
  16. 3dsmax 扫描功能 点连接 绘制连接线
  17. html中数字输入框,HTML “input number数字”输入控件简介说明
  18. MATLAB 机器人工具箱简单教程:(下载及安装)
  19. matlab 按字母排序,matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版
  20. HTMLlesson1.1

热门文章

  1. CAD二次开发--CAD2007(.Net3.5环境)等低版本CAD二次开发在VS中无法捕获断点调试解决办法(CAD二次开发无法断点调试解决办法)
  2. php md5校验工具下载,如何查看和校验软件的md5码?
  3. 初中生学计算机学编程,初中生学编程杂谈(1)
  4. 基于51单片机室内室外环境检测仪控制设计
  5. Nuxt 中使用 axios【ssr访问和非ssr访问】
  6. TCP/IP和OSI七层模型区别
  7. 七(5)查询动态-点赞评论-Redis(hash)
  8. 2018年8月16日多线程并发和队列
  9. 使用JavaCV对视频截取图片,生成视频JPG封面图和GIF动态图(可以兼容windows和linux,无需安装ffmpeg软件)...
  10. SEO赚不到钱是病 得治