python怎么定义名称_python 之 面向对象基础(定义类、创建对象,名称空间)
第七章面向对象
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 之 面向对象基础(定义类、创建对象,名称空间)相关推荐
- Python面向对象基础示例_创建对象
Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...
- Python快速入门(八)面向对象1:类、对象和封装
Python快速入门(八)面向对象1:类.对象和封装 1.类和对象 1)类的定义 2)对象的定义 3)类和对象的关系 4)类的设计 2.第一个面向对象案列 代码1 代码2 3.设置对象属性 4.ini ...
- Java_面向对象基础(类、对象、方法和构造函数)
Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...
- python中函数的定义包括_python中函数的定义及调用
python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...
- 2sin30°在python中如何表示_Python学习之基础练习(1)
基础很重要 万丈高楼平地起,不打好地基,能力的提升是很难的,这一点,我深有体会.之前我直接进行爬虫的编写,虽然能爬取到一些信息,但是,更深层次的功能我却无法自行编写,说到底,还是基础太薄弱了.因此,多 ...
- python语言中函数在调用前必须先定义吗_Python函数必须先定义,后调用说明(函数调用函数例外)...
java开发者在定义类中的方法时,不会关心方法的定义相对于调用语句的位置. 但是python中需要注意: 函数必须先定义.后调用(函数调用函数例外). 如下为示例说明: 1.python函数的应用一般 ...
- python if高级用法_Python高级用法总结--元类
type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义,而是运行时动态创建的. 比方说我们要定义一个 Hello 的 class ,就写一个hello.py 模块: class ...
- python类的构造方法名称_Python的面向对象、Class 概念与使用
Class(类)的基本概念: 类:将同一种具体事务的共同点抽象出来的表现,Python的类是一种可调用对象. 类中定义的有方法,变量,数据结构. 变量则是类属性本身是没有数据的,只有在实例化的时候将数 ...
- python有哪些知识_Python有哪些基础知识
Python基础知识:1.引用和对象:2.可变数据类型和不可变数据类型:3.引用传递和值传递:4.深拷贝和浅拷贝:5.基本数据类型:6.关键字.标识符和内置函数:7.算术.赋值运算符等等. 相关学习推 ...
最新文章
- python 错误代码_PYTHON错误代码及解决办法
- PHPweb应用程序开发技巧
- C#输出带有换行符的字符串
- C++多线程编程(2) 条件变量与原子操作
- 001 python接口 get请求
- Altium AD20大电流表层开窗,用特殊粘贴复制平面区域到其他层,阻焊开窗显示沉金LOGO
- 一文看尽 TensorFlow“奋斗史”!| CSDN 博文精选
- 第一个mybatis项目
- veu的常用指令(复习使用)
- comparison of VLIW and superscaler
- python 多元字符多项式的展开问题
- Simon Game实现过程记录
- 关键词词云怎么做_做关键词分析,我有4款免费词云工具
- Gspay 和 95epay
- JavaScript-页面布局-div布局-盒子模型
- 3dsmax 扫描功能 点连接 绘制连接线
- html中数字输入框,HTML “input number数字”输入控件简介说明
- MATLAB 机器人工具箱简单教程:(下载及安装)
- matlab 按字母排序,matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版
- HTMLlesson1.1
热门文章
- CAD二次开发--CAD2007(.Net3.5环境)等低版本CAD二次开发在VS中无法捕获断点调试解决办法(CAD二次开发无法断点调试解决办法)
- php md5校验工具下载,如何查看和校验软件的md5码?
- 初中生学计算机学编程,初中生学编程杂谈(1)
- 基于51单片机室内室外环境检测仪控制设计
- Nuxt 中使用 axios【ssr访问和非ssr访问】
- TCP/IP和OSI七层模型区别
- 七(5)查询动态-点赞评论-Redis(hash)
- 2018年8月16日多线程并发和队列
- 使用JavaCV对视频截取图片,生成视频JPG封面图和GIF动态图(可以兼容windows和linux,无需安装ffmpeg软件)...
- SEO赚不到钱是病 得治