初学者python笔记(面向对象编程、类与对象)
文章目录
- 面向对象设计
- 类与对象的概念
- 1、类与对象的本质
- 2、面向对象设计 到 面向对象编程
- 3、类实例化
- 4、例如一个学校类
- 面向对象编程
- 1、案例
- 2、面向对象语言和面向对象编程之间的关系
- 3、类的属性
- 4、类的其他一些属性
- 5、类中的作用域
- 6、实例化相关(查、增、改、删)
Python是一门面向对象设计的编程语言,所以Python里面提供了非常专业的面向对象用法。本篇就来总结一下面向对象相关的知识,从面向对象设计,到面向对象编程,再到Python中独有的类与对象
面向对象设计
先来看一个面向对象设计的例子(里面没有用到类与对象):
def wushi(name,age,wutype):#武士的动作def sword(sw):print('{}正在释放{}'.format(sw['one_sword'],sw['three_sword'])) #取键对应的值def teji(tj):print('{}释放{}大招'.format(tj['one_sword'],tj['three_teji']))#武士的属性def init(name,age,wutype): #定义一个函数来专门装存武士属性的字典#一个定义属性的字典zhaoshi = {'one_sword':name, #字典的值为形参变量'two_sword':age,'three_sword':wutype,'one_teji':'大振撼','three_teji':'三千世界',#字典的值可以是一个函数名,这样就将武士的动作和属性绑定起来了#键'sword'和'teji'就是属性,值sword和teji就是动作(函数)'sword':sword, 'teji':teji,}return zhaoshi #返回一个字典res = init(name,age,wutype)return resret1 = wushi('索隆','22','三刀流') #运行函数,将返回值赋值给ret
ret1['sword'](ret1)
#找到字典键['sword']对应的值,因为是个函数,可以用()直接运行
#传入的是一个字典,所以在sword函数中可以用键取值
ret2 = wushi('路飞','19','无刀流')
ret2['teji'](ret2)
#这样就可以生成多个武士(wushi函数),并且给他们传入不同的属性
运行结果:
类与对象的概念
1、类与对象的本质
一个对象就是动作跟属性的结合;
一个类就是承载同种类事物的动作和属性的一个容器;
因为这容器有特定的属性和动作,就相当于一个模型。
2、面向对象设计 到 面向对象编程
在上文的代码中,wushi(武士)就是一个类,sword和teji函数就是类中定义的动作,zhaoshi就是类中定义的属性;
而ret1和ret2就两个对象,这两个对象拥有了类中的动作和属性
3、类实例化
由类产生一个对象就是类实例化,这个对象具备类中的属性和动作,一个类可以产生任意个对象
4、例如一个学校类
属性: name, address, type
动作: 考试, 招生, 开除学生
每一所学校则就是一个个对象;由这个学校类产生多个学校就类实例化
面向对象编程
1、案例
#创建一个wushi类
class wushi: #类可以不要参数#定义属性def __init__(self,name,age,wutype): #相当于存放属性的一个函数,self参数是必要参数self.name = name #将self的name用传入的形参name来赋值,就相对于面向对象设计中的字典给键赋值self.age = ageself.wutype = wutype#定义动作def sword(self): #传入的参数为self这个属性,将动作与属性结合起来print('{}岁的{}正在释放{}'.format(self.age, self.name, self.wutype))#用self.来使用属性变量,类似字典中的sw['age'],sw['name'],sw['wutype']def teji(self):print('{}岁的{}释放大招{}'.format(self.age, self.name, self.wutype))#创建对象,即类实例化,每一个对象都调用了wushi这个类
wushi_one = wushi('路飞','19','无刀流')
wushi_two = wushi('索隆','22','三刀流')
wushi_three = wushi('鹰眼','32','大宝剑')#调用对象,即使用对象中的属性和动作
wushi_one.sword()
wushi_two.teji()
wushi_three.teji()
运行结果:
2、面向对象语言和面向对象编程之间的关系
Python是一门面向对象设计的编程语言,但面向对象编程并不是每个程序都必须的,如果用普通的函数堆叠就能实现功能也可以不用class类和__init__的方法。
只是在程序比较大的时候,用面向对象编程可以使程序更简单。
还有一个概念,用面向对象语言写程序、程序的设计是面向对象的是两码事。
比如第一段代码里面,它是面向对象设计,但在非面向对象语言里这样写代码,那也可以叫做程序的设计是面向对象的
3、类的属性
数据属性: 就是变量
函数属性: 就是函数,但在面向对象里面称作方法
#创建一个wushi类
class wushi:#定义属性vv = '海贼王' #定义一个数据属性def killer(self):print(self)return 'killer 的返回值'print(wushi.vv) #调用数据属性
print(wushi.killer('三千世界')) #调用函数属性
print(dir(wushi)) #查看类的所有属性名
print(wushi.__dict__) #查看类属性字典,包括属性名和属性
print(wushi.__dict__['vv']) #用键值对取数据属性
print(wushi.__dict__['killer']('三千世界')) #用键值对取函数属性
运行结果:
4、类的其他一些属性
#创建一个wushi类
class wushi:'这是一个武士的类' #相当于一个类的描述#定义属性vv = '海贼王' #定义一个数据属性def killer(self):print(self)return 'killer 的返回值'print(wushi.__name__) #输出类的名称
print(wushi.__doc__) #输出类的描述
print(wushi.__base__) #类的类型,都为<class 'object'>
print(wushi.__module__) #查看类所在的模块
运行结果:
5、类中的作用域
在类定义的变量是属性,可以调用,全局变量则不能当做属性来调用
name = 'Kevie'#创建一个类
class wushi:age = 18print('this is from 类%s' %name)v = wushi()
print(v.age)
#print(v.name) #name是全局变量#创建一个函数
def wushi_2():age = 18print('this is from 函数%s' %name)
wushi_2()
运行结果:
6、实例化相关(查、增、改、删)
实例由类产生,类有数据属性和函数属性;但实例(对象)只有数据属性,没有函数属性;只是通过数据属性来访问函数属性;所以每个函数都需要传入self属性作为参数
class wushi:def __init__(self,name,age):self.name = nameself.age = agedef bark(self,greet):print('%s ! %s am %s' %(greet,self.name,self.age))v = wushi('索隆','22') #实例化一个类,生成对象(实例)v
print(v.age) #用实例来调用数据属性
v.bark('Hello') #通过数据属性self来访问bark函数属性,同时再传入一个参数#修改实例(对象)的属性
v.name = '路飞'
v.bark('Hello')#增加类属性
wushi.wutype = '三千世界1'
print(wushi.wutype)
#增加对象(实例)属性
v.wutype = '三千世界2'
print(wushi.wutype)#增加一个动作(类与实例方法相同)
def play_game():print('this is from play_game')
v.play_game = play_game
v.play_game()#删除类属性(实例属性方法同)
del wushi.wutype
print(wushi.__dict__) #查看所有属性,就不存在wutype了
运行结果:
注意:类修改后只改变了类,在改之前创建的实例是不会变的;同样,实例的修改也不会影响类的属性
初学者python笔记(面向对象编程、类与对象)相关推荐
- 面向对象编程——类和对象
面向对象编程 类和对象 类(Class):用来描述具有相同属性和方法的对象的集合 class Student:name='stu'#属性def say(self):#方法print("hel ...
- python【面向对象(类和对象)】
1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...
- python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...
- python面向对象图片_趣味解读Python面向对象编程 (类和对象)
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...
- python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态
六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...
- [转载] python的面向对象和类与对象
参考链接: Python对象和类 # 面向过程编程 # 核心是过程二字,过程指的是解决问题的步骤,即先干什么在干什么然后干什么 # 基于该思想编写程序好比在设计一条流水线,是一种机械式 ...
- Day16:面向对象编程——类和对象
一.面向对象的程序设计 在此之前用到的事面向过程的程序设计,它的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大的降低 ...
- JAVA300集——面向对象编程-类和对象-构造方法及其重载-方法调用
本章概述 "如何开车":(由多个步骤组成),简单问题,可以使用面向过程. "如何造车":(成千上万个零件,细节很多),复杂问题,宏观上用面向对象把握,微观操作用 ...
- 【Android开发日志】Kotlin 面向对象编程 - 类与对象(11)
Android Studio 4.0已发布,此教程已更新至4.0版本. 面向对象,顾名思义,一定得是"对象",生活当中的人.电脑.等任何事物,他们都有各自的属性,我们编程里把这些属 ...
最新文章
- mysql中的EXPLAIN
- python平均工资-2020 10大薪资最高的IT编程语言排名
- php网站分区,PHP - Manual: 分区和分片 (官方文档)
- python骨灰技巧_Pandas技巧,某骨灰级Pythoner经验总结,呕心沥血!
- ebs oracle 落伍了吗_向不了解oracle EBS的人介绍Oracle EBS
- 工程师误删了公司生产数据库,如何看待数据安全架构的脆弱性?
- STM32工作笔记0069---汉字显示实验
- 初学Python之利用map编写姓名格式化输出函数
- 当前版本的Android Gradle插件不支持按需配置
- 支持树型的GridView控件
- 快速入手光学字符识别控件Aspose.OCR!学会使用C#以编程方式对图像执行OCR
- IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解)
- 当医疗邂逅ICT——长沙湘雅医疗现场会,我们,不见不散
- 中软干两年有用吗_在中软国际的两年,是我成长最快的阶段
- deb 中标麒麟_最新版国产Linux操作系统“中标麒麟”体验
- 【解决方案】血压计方案原理和产品参数
- 【安全科普】揭秘IPS之网络攻击的“字典”
- 那些证书相关的玩意儿
- make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libstagefright_intermediates/OMXCodec.o]
- 如何寻找外链资源?SEO优化最全的外链资源
热门文章
- linux中兴上网客户端,中兴新支点N-Print,简单高效Linux桌面操作系统网络打印方案...
- 用Html 和 Css来实现一个小小案例
- 开发接口文档_产品经理必懂的接口文档撰写方式
- 云顶之弈法机器人_云顶之弈:拳头加强机器人,6法机器人主C打法直接火了!...
- JAVA netty 定时任务_Netty HashedWheelTimer 定时任务调用
- linux traceroute命令详解_详解Linux系统路由跟踪指令traceroute语法、工作原理和实例说明...
- python写的小程序怎么封装_微信小程序源码分享之封装request的方法
- Centos7.6 编译安装heartbeat,及遇到的问题。
- hpux 11.11 连接HDS 存储,采用HDLM管理带来的麻烦,需重启。
- 基于JAVA+SpringBoot+Mybatis+MYSQL的小区物业管理系统