前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python面向对象编程基础

Python面向对象编程基础

作者头像
py3study
发布于 2020-01-09 15:19:20
发布于 2020-01-09 15:19:20
52202
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:2
代码可运行

面向对象编程是Python中的核心之一,面向对象的核心并不是概念,语法,使用有多么复杂,而是一种编程思想,并不是掌握了类创建与使用就真正掌握了面向对象编程,这需要在不断工作与练习中逐步提升;抛去代码,我们先来看现实世界的基本概念:

类:

我们最先想到的就是分类:人,动物,植物...这些都是自然界的大类;

每个类别都有自己的特征与行为,而类就是描述这些具有相同属性与方法的对象的集合。 通过一个图来全面了解面向对象基本概念:

属性:

类具有的特征,对于人类来说,身高、体重、性别等是基本属性;

方法:

类具有的功能,对于人来来说:吃饭、睡觉、工作等是通用方法;

实例:

类对应的一个具体对象,比如梅西,詹姆斯都是实际存在的人; 每个实例都有自己实际属性与方法,比如詹姆斯的姓名,体重等;

方法:

对象行为的描述,对于人类来说,吃饭,睡觉,工作都是方法;

还有一些其他基本概念,我们通过Python来实际讲解。

1:类基本语法

1.1:定义类

先来看基本语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class 类名:
    pass
#例如:
class Person:
    pass

1>class 为关键字; 2>Person为类名称;

人类有一些共同特征与方法,我们如何在类中添加?

1.2:添类属性

人类中有公共属性,例如:居住在地球,氧气和水是必需品;我们可以将其添加到类中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person:
    #居住星球
    start = 'Earth'
    #必须品:水,实物,氧气
    needlist = ['water', 'food','oxygen']

我们可以直接访问这些属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(Person.star)
print(Person.needlist)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(Person.star)
print(Person.needlist)

人类有一些共同方法,例如:吃饭,睡觉,工作等,如何添加到类中?

添加方法:

python中类方法分为实例方法,类方法,静态方法,其他语言中也有这些概念,可能语法不同,但是基本概念类似,我们先来看实例方法,基本语法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class 类名:
    def func_name(self, *args, **kwargs):
        pass

1>类中添加实例方法,与定义函数类似,def关键字+方法名+参数; 2>实例方法的第一个参数必须是self,这是基本语法; 3>实例方法不能直接调用,只有具体对象才能调用;

添加人类方法:sleep,eat,work,say;代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person:
    #居住星球
    star = 'Earth'
    #必须品:水,实物,氧气
    needlist = ['water', 'food','oxygen']
    #第一个参数:self
    def eat(self, foodlist):
        pass
    def sleep(self):
        pass
    def work(self, tasklist):
        pass
    def say(self, what):
        pass

后面实际工作与学习中,如果我们对类掌握十分熟悉,可以先把属性与接口定义出来,然后逐步完善每一个方法就可以,为了方便后面观察调用过程,我们给每个方法加上输出信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person:
    #居住星球
    star = 'Earth'
    #必须品:水,实物,氧气
    needlist = ['water', 'food','oxygen']
    #第一个参数:self
    def eat(self, foodlist):
        print('I eat:',foodlist)
    def sleep(self):
        print('I am sleep now')
    def work(self, tasklist):
        print('my work is:', tasklist)
    def say(self, what):
        print('I say:', what)

类定义好了,我们如何来使用呢,来创建具体人的对象,实例化:

实例化

创建一个对象,对于刚才例子我们可以使用下面方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1 = Person()
p2 = Person()

p2与p2就是Person类对应的两个对象,也成为实例,如何调用eat, sleep等方法? 使用实例p1,p2还是Person?当有疑问时,我们可以通过实际操作验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1.sleep()
Person.sleep()

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
I am sleep now
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-3a15402f300a> in <module>()
      1 p1.sleep()
----> 2 Person.sleep()

TypeError: sleep() missing 1 required positional argument: 'self'

第一条语句正常输出,第二条是错误的,因为需要参数self; 这里我们有必要把这个搞清楚:

1>Person类中的方法都是实例方法,他的第一个参数必须是self,那么self究竟是谁? 2>如果是实例直接调用,那么self,就是实例自己,比如,p1,p2; 3>类不能直接调用实例方法,因为没有与实例进行绑定,但是可以换一种方式调用;

下面我们来验证self究竟是谁,对代码进行修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#定义最简Person类
class Person:
    def whoami(self):
        print('I am 0x%x'%id(self))
#创建对象
p = Person()
#id函数:显示对象内存地址
print('p id:0x%x'%id(p))
#对象调用实例方法
p.whoami()
#不推荐使用,只是用来理解实例方法,
#实例方法第一参数必须是类的一个实例
Person.whoami(p)

输出结果( 输出地址可能不同):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p id:0x7f99c06d4fd0
I am 0x7f99c06d4fd0
I am 0x7f99c06d4fd0

通过这里例子,希望对大家理解实例方法有帮助。

重要的__init__方法

定义人类了,但人有名称,年龄等自己特征,如何在实例化时候指定这些属性,这里我们需要使用__init__方法,我们先来添加一个__init__方法,看一下调用过程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#添加__init__方法
class Person:
    def __init__(self, name):
        print('call init name:', name)
#实例化时,添加名称
p1 = Person('sun')
p2 = Person('li')

输出结果为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
call init name: sun
call init name: li

我们并没有显示调用__init__方法,这是怎么回事? 实例化过程会默认调用__init__方法,调用__init__时,实例已经创建出来,这个方法的参数对应实例化时传递参数,目的:初始化对象的属性。比如名称,如何添加实例属性?

类属性与实例属性

首先来看类属性,我们人类都属于地球,所以我们添加一个属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person:
    #居住星球
    star = 'Earth'
    name = 'unknow'
p1 = Person()
#访问star与name
print(p1.star, p1.name)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Earth unknow

这里我们访问p1的star与name其实访问的是类属性。

添加实例属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#既简单又粗暴
p1.name = 'sun'
print(p1.star, p1.name)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Earth sun

思考问题:这时候Person类中的name是什么?做实验验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('p1.name:',p1.name)
print('Person.name:',Person.name)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p1.name: sun
Person.name: unknow

分析下上面步骤:

1>p1.name=sun,修改了什么?它只是对p1增加name属性,值为sun,对其他对象与Person类没有任何影响; 2>p1与Person中有了name属性,p1访问时,选择哪个?如果实例中有name属性,使用实例中属性,如果没有,去类中查找,若类中不存在报异常。

下面我们在__init__方法中直接添加实力属性,实例化时直接添加名称与年龄:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person:
    name = 'unknow'
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def selfintroduction(self):
        print('my name is %s, I am %d years old.'%(self.name, self.age))
p1 = Person('sun', 10)
p1.selfintroduction()

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my name is sun, I am 10 years old.

我们有个问题,实例中的name与age被放到哪里,通过__dict__看下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print('Person:',Person.__dict__)
print('p1:',p1.__dict__)

输出结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Person: {'__module__': '__main__', 'name': 'unknow', '__init__': <function Person.__init__ at 0x7f99c0748d90>, 'selfintroduction': <function Person.selfintroduction at 0x7f99c0748bf8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
p1: {'name': 'sun', 'age': 10}

通过输出信息,我们可以看到这些值存放方式,可以通过这种方式直接赋予实例新的属性,但是我们不推荐这种方式。

总结

这节我们主要内容:

1>面向对象基本概念:类,对象,属性,方法; 2>Python中类定义及实例化过程; 3>__init__方法及属性查找过程;

到这里我们对类有了基本了解,后面内容中我来介绍类的具体使用及高级使用方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
VR减肥、味觉减肥全是噱头!从神经和基因层面来看,真正的黑科技减肥方法是这两种!
在减肥这件大事上,科学家可是操碎了心。 冬天不减肥,夏天徒伤悲,在美食面前,肥胖问题快成了人生大事: 我们先来看世界卫生组织(WHO)发布的一组数据: 从1975年开始至今,全球肥胖人数增加了约3倍; 至2016年底,18岁及以上的成年人中,超过19亿人体重超重,其中超过6.5亿人是肥胖的; 至2016年底,超过3.4亿5-19岁的儿童和青少年超重或肥胖; 至2016年底,有4100万5岁以下的儿童超重或肥胖。 所以,作为一名成年人,患有肥胖症的概率是十分之一,即每十个人中就有一个人患有肥胖症!!! 看到这
镁客网
2018/05/30
5700
8.28 VR扫描:东京大学发明电颚刺激GJS技术,改变饮食体验
近日,东京大学与大阪大学研究团队,展示了他们最新发明的电颚刺激GJS技术。该技术可用于解决传统电流舌刺激GTS存在移动的问题。据悉,GJS技术能够控制味道,改变饮食体验,并且效果可以持续很长一段时间。
VRPinea
2018/09/28
6290
10.25 VR扫描:宏碁增资500万美元成StarVR最大股东;Unreal 4.18正式开放下载
宏碁成StarVR最大股东:增资500万美元占股66.7% 今日,宏碁和星风工作室(Starbreeze)宣布,宏碁将再次向双方合资公司StarVR注资500万美元,占股比例提高到 66.7%,而星风
VRPinea
2018/05/17
6210
10.24VR行业大事件:App Lab应用数量飙升至1457款,是Quest主商店的三倍多
(VRPinea 10月24日讯)今日重点新闻:Meta官方测试平台App Lab目前拥有1457款游戏和应用;罗永浩的AR公司完成由美团投资的近4亿元人民币天使轮融资;VR拳击游戏《Golden Gloves VR》已登陆Meta Quest头显。
VRPinea
2022/11/17
4960
10.24VR行业大事件:App Lab应用数量飙升至1457款,是Quest主商店的三倍多
10.17 VR扫描:Sixense宣布Kickstarter众筹的STEM控制器将全额退款
今日,Sixense宣布将向STEM控制器项目的Kickstarter众筹支持者和预购用户,全额退款。据悉,Sixense早在2013年就开始为VR探索手部控制器,但这家公司一直未能生产消费者版的STEM控制器。
VRPinea
2018/11/07
4820
如何科学减肥?这款小程序,教你边吃边瘦
不过在加强运动的同时,我们也不能忽视饮食这个更为重要的因素,比如说控制食物摄入的热量。
知晓君
2018/08/01
7311
如何科学减肥?这款小程序,教你边吃边瘦
提到减肥就是跑步?你尝试过当前最流行的VR减肥法吗?
众所周知,VR是一种在家里既能休闲娱乐,又能达到锻炼效果的游戏模式。虽说每个人一场体验下来都会大汗淋漓,但VR锻炼效果有多好,其实很难用数值体现。因此很多人并不清楚,玩VR所消耗的卡路里到底能不能比得
VRPinea
2018/05/17
8040
11.7 VR圈大事件:谷歌支持WebVR 的Chrome浏览器,Adobe展示VR中编辑360度视频编辑器CloverVR
谷歌支持WebVR 的Chrome浏览器将在明年1月推出 谷歌宣布计划在安卓系统发布一个公共版本的 Chrome,支持 WebVR 1.1。WebVR 的“稳定版”发布意味着它会被制作成一个一样的 C
VRPinea
2018/05/14
8820
【快报】机器学习识别自杀行为准确率达到93% | 赛灵思推出FPGA加速堆栈方案,比CPU快40倍
1 赛灵思推出FPGA加速堆栈方案,比CPU快40倍,比其它FPGA方案快6倍 赛灵思公司(Xilinx)近日在2016全球超算大会(SC 16))上宣布推出一套全新的技术——赛灵思可重配置加速堆栈方
新智元
2018/03/26
6140
【快报】机器学习识别自杀行为准确率达到93%  | 赛灵思推出FPGA加速堆栈方案,比CPU快40倍
10.12 VR扫描:PSVR将于本月17日开启周年活动,游戏折扣高达60%
PSVR将于本月17日开启周年活动,提供六折优惠 今日,索尼官方表示,PlayStation VR周年纪念活动将于10月17日开始,将大规模打折促销其VR游戏和体验。据了解,此次打折将提供高达60%的
VRPinea
2018/05/17
5620
8.8 VR扫描:售价或1200美元,Magic Leap将今晚/明早公布发售或正式发售
根据Magic Leap创始人Rony Abovetz社交媒体更新信息的细节分析,Magic Leap One创作者版本或将于美国时间8月8日发售,或将于美国时间8月8日公布发售信息。售价预估在1200美元左右。
VRPinea
2018/08/21
2700
8.8 VR扫描:售价或1200美元,Magic Leap将今晚/明早公布发售或正式发售
在VR中大快朵颐的我,永远都是身体苗条的小仙女
月初才过完劳动节,月末又紧接着迎来了端午节。五一的堵堵堵还记忆犹新,虽说端午节高速不免通,但想想距离下一个国假还要再等四个月,不少人都会选择在端午节出行。 想想外面炽热的阳光以及“人从众”的拥挤景象,
VRPinea
2018/05/16
7950
2.21 VR扫描:HTC发布两款全新VR概念机;Facebook与索尼宣布退出GDC 2020
(VRPinea 2月21日电)今日重点新闻:HTC发布两款全新VR概念机,Facebook与索尼宣布退出GDC 2020,Magic Leap招聘信息显示已成立日本分部。
VRPinea
2020/02/26
4680
减肥人士要哭:食物不吃看看也不行,因为你的大脑会发炎
万博 发自 凹非寺 量子位 | 公众号 QbitAI 想吃美食却担心长胖,那看一看满足一下眼睛的欲望,总无伤大雅吧? 想必这是很多减肥人士的真实想法。 But!你可能想简单了,只看不吃,虽然能减少能量摄入,但依然对身体有害。 来自瑞士巴塞尔大学的最新研究显示,对于肥胖人群来说,减肥只看不吃,可能会让你的胰岛素分泌出现紊乱,对健康造成影响。 而造成这种结果的背后机制,就在你的大脑里: 只看不吃,能让大脑发炎 研究人员发现,控制餐前或者用餐之初胰岛素分泌的关键,是一种叫做白细胞介素1β的细胞因子,而这种细胞因
量子位
2022/07/18
1900
减肥人士要哭:食物不吃看看也不行,因为你的大脑会发炎
春节吃胖了?VR《减肥攻略》教你成为全街最靓的仔!
所以说,长胖都是有原因的。但年假马上就要结束,该开学的开学,该上班的上班,你真的准备带着“一身肥肉”去见人吗?听起来就有些莫名尴尬。
VRPinea
2019/04/28
6980
春节吃胖了?VR《减肥攻略》教你成为全街最靓的仔!
2.13 VR扫描:Magic Leap获Axel Springer投资,金额未透露
Magic Leap获Axel Springer投资,金额未透露 据悉,欧洲最大的数字出版社Axel Springer已完成对Magic Leap的投资,但未透露具体投资金额。Axel Spring
VRPinea
2018/05/18
7830
2.22 VR扫描:阿里携手百联,将打造个性化VR购物体验
阿里巴巴联手百联,打造VR购物 日前,阿里巴巴集团与百联集团共同宣布达成战略合作。百联集团是中国最大的多元化全业态零售集团,总部位于上海,大半条南京路都在其麾下。双方计划在未来,利用VR、AR、MR这
VRPinea
2018/05/15
6000
成本仅18元,DIY微型Steam VR追踪器了解一下?
近日,东京大学高级科学与技术研究中心的教授Masahiko Inami,在推特上发布了一张自制的小型Steam VR追踪器图片。
VRPinea
2018/07/26
5820
成本仅18元,DIY微型Steam VR追踪器了解一下?
压力太大?这款VR头显能为你打造心灵禅室
虚拟现实技术一直与手机以及视频游戏行业息息相关。然而,日本的一家技术公司正在利用虚拟现实技术平台做一些不同的事:压力管理。 把VR头显与大脑监控相结合,DG实验室的脑电波VR头显内置了脑电图(EEG)
VRPinea
2018/05/14
7440
11.8 VR扫描:eMagin推全球最亮Micro OLED显示器;VR教育平台Shinta VR完成A轮融资
(VRPinea 11月8日讯)今日重点新闻:eMagin推出全球最亮全彩Micro OLED显示器,其亮度高达10000尼特;印尼VR开发商Shinta VR获得A轮融资,新资金将用来招聘人才,以及进一步开发其VR平台;德国初创公司rooom旗下的eventCloud平台为今年的AWE博览会提供了虚拟会议和展览平台。
VRPinea
2021/11/16
3160
推荐阅读
VR减肥、味觉减肥全是噱头!从神经和基因层面来看,真正的黑科技减肥方法是这两种!
5700
8.28 VR扫描:东京大学发明电颚刺激GJS技术,改变饮食体验
6290
10.25 VR扫描:宏碁增资500万美元成StarVR最大股东;Unreal 4.18正式开放下载
6210
10.24VR行业大事件:App Lab应用数量飙升至1457款,是Quest主商店的三倍多
4960
10.17 VR扫描:Sixense宣布Kickstarter众筹的STEM控制器将全额退款
4820
如何科学减肥?这款小程序,教你边吃边瘦
7311
提到减肥就是跑步?你尝试过当前最流行的VR减肥法吗?
8040
11.7 VR圈大事件:谷歌支持WebVR 的Chrome浏览器,Adobe展示VR中编辑360度视频编辑器CloverVR
8820
【快报】机器学习识别自杀行为准确率达到93% | 赛灵思推出FPGA加速堆栈方案,比CPU快40倍
6140
10.12 VR扫描:PSVR将于本月17日开启周年活动,游戏折扣高达60%
5620
8.8 VR扫描:售价或1200美元,Magic Leap将今晚/明早公布发售或正式发售
2700
在VR中大快朵颐的我,永远都是身体苗条的小仙女
7950
2.21 VR扫描:HTC发布两款全新VR概念机;Facebook与索尼宣布退出GDC 2020
4680
减肥人士要哭:食物不吃看看也不行,因为你的大脑会发炎
1900
春节吃胖了?VR《减肥攻略》教你成为全街最靓的仔!
6980
2.13 VR扫描:Magic Leap获Axel Springer投资,金额未透露
7830
2.22 VR扫描:阿里携手百联,将打造个性化VR购物体验
6000
成本仅18元,DIY微型Steam VR追踪器了解一下?
5820
压力太大?这款VR头显能为你打造心灵禅室
7440
11.8 VR扫描:eMagin推全球最亮Micro OLED显示器;VR教育平台Shinta VR完成A轮融资
3160
相关推荐
VR减肥、味觉减肥全是噱头!从神经和基因层面来看,真正的黑科技减肥方法是这两种!
更多 >
LV.5
安徽省刀锋网络科技有限公司后台开发
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档