前言

最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。
概述
OOP思想
面向对象的三大特性:
一、封装
封装,对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,即无法调用。
私有化:将类或函数中的某些属性限制在某个区域之内,外部无法调用。
Python中私有化的方法也比较简单,就是在准备私有化的属性(包括方法、数据)名字前面加双下划线。
例如:
class ProtectMe(object):
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
def __python(self):
print("I love Python.")
def code(self):
print9"Which language do you like?")
self.__python()
if __name__ == "__main__":
p = ProtectMe()
print(p.me)
print(p.__name)
#运行结果
qiwsir
Traceback (most recent call last):
File "21102.py", line 21, in <module>
print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name'
说明:__name属性隐藏了,无法调用。
调用私有属性,可以使用property函数
class ProtectMe(object): def __init__(self): self.me = "qiwsir" self.__name = "kivi" @property def name(self): return self.__name if __name__ == "__main__": p = ProtectMe() print(p.name) #运行结果 kivi
所以,在使用面向对象的封装特性时,需要:
第一步:将内容封装到某处
self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1
当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2
所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。
第二步:从某处调用被封装的内容
调用被封装的内容时,有两种情况:
class Role(object):
ac = None #类变量
def __init__(self,name,role,weapon,life_value):
#初始化方法
self.name = name #实例变量(成员变量)
self.role = role
self.weapon = weapon
self.life_val = life_value
def buy_weapon(self,weapon): #定义方法
#self:表示实例本身
self.weapon = weapon
# print("%s is buying [%s]" %(self.name,weapon))
#把一个抽象的类变成一个具体的对象的过程,叫实例化
p1 = Role("sanjiang",'Police',"B10",90) #实例
t1 = Role("Chunyun",'Terrorist',"B11",100)
二、继承
继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。
class SchoolMember(object):
# member_nums = 0
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
# self.enroll()
def enroll(self):
SchoolMember.member_nums += 1
print("SchoolMember [%s] is enrolled!" %self.name)
def tell(self):
print("Hello my name is [%s]" %self.name)
class Teacher(SchoolMember):
def __init__(self,name,age,sex,course,salary): #重写父类的__init__方法
super(Teacher,self).__init__(name,age,sex) #继承(新式类)
# SchoolMember.__init__(self,name,age,sex) #继承(旧式类)
self.course = course
self.salary = salary
def teaching(self):
print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
class Student(SchoolMember):
def __init__(self,name,age,sex,course,tuition):
super(Student,self).__init__(name,age,sex)
self.course = course
self.tuition = tuition
def pay_tuition(self):
print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# python
# 面向对象
# python面向对象编程
# python面向对象实例
# Python面向对象程序设计OOP深入分析【构造函数
# 组合类
# 工具类等】
# Python面向对象程序设计OOP入门教程【类
# 实例
# 继承
# 重载等】
# Python面向对象编程基础解析(一)
# 简述Python中的面向对象编程的概念
# 浅谈Python面向对象编程oop思想心得
# 三大
# 是一个
# 这一
# 下划线
# 相互作用
# 重写
# 更快
# 可以使用
# 这篇文章
# 有两种
# 更强
# 类似于
# 中都
# 第二步
# 两片
# 接触过
# 进行分类
# 日后
# 从上到下
相关文章:
如何选择高效便捷的WAP商城建站系统?
清除minerd进程的简单方法
建站之星后台管理:高效配置与模板优化提升用户体验
建站OpenVZ教程与优化策略:配置指南与性能提升
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何在IIS中新建站点并解决端口绑定冲突?
如何在阿里云完成域名注册与建站?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
中山网站推广排名,中山信息港登录入口?
建站之星备案流程有哪些注意事项?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
制作电商网页,电商供应链怎么做?
内部网站制作流程,如何建立公司内部网站?
南京网站制作费用,南京远驱官方网站?
如何高效利用200m空间完成建站?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
电商网站制作公司有哪些,1688网是什么意思?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
Bpmn 2.0的XML文件怎么画流程图
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何获取免费开源的自助建站系统源码?
如何用IIS7快速搭建并优化网站站点?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何选择美橙互联多站合一建站方案?
如何在VPS电脑上快速搭建网站?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Android使用GridView实现日历的简单功能
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在阿里云服务器自主搭建网站?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
名字制作网站免费,所有小说网站的名字?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
开心动漫网站制作软件下载,十分开心动画为何停播?
电商网站制作价格怎么算,网上拍卖流程以及规则?
建站之家VIP精选网站模板与SEO优化教程整合指南
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
寿县云建站:智能SEO优化与多行业模板快速上线指南
Python lxml的etree和ElementTree有什么区别
制作公司内部网站有哪些,内网如何建网站?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何用虚拟主机快速搭建网站?详细步骤解析
全景视频制作网站有哪些,全景图怎么做成网页?
定制建站方案优化指南:企业官网开发与建站费用解析
如何选择高效响应式自助建站源码系统?
如何在阿里云ECS服务器部署织梦CMS网站?
宝塔新建站点为何无法访问?如何排查?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
建站之星各版本价格是多少?
如何通过FTP服务器快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。