登陆注册
71628900000014

第14章 类的定义

一个类的主要价值在面向对象编程中是发挥抽象的作用。在 Python 中每一个数据类型都是某个类的实例。一个类提供了许多行为,每个行为也就是其中的方法,也就是定义成类的实例方法。

一个类也起到了作为自身实例的一种蓝图作用。这样对于一个类的每个实例来说,都能有效地确定状态信息,常会称为属性,有时也会叫做财产项。例如,实例变量,数据。

定义一个类如同定义函数似的,使用 class 语句,但是有几点特殊地方需要重新认识一下:

第一 self 识别符:

在 Python 中定义任何一个实例方法时,第一位置参数名使用了默认的 self 作为惯例。那么 self 这个参数扮演了一个重要的、关键的角色。那就是 self 会识别实例会使用哪一个方法。例如:

class C(object):

def __init__(self):

pass

def get(self):

pass

假设我们有一个 C 类,那么 a 和 b 分别是 C 的一个实例,当 a.get()的时候,或 b.get()的时候,C 类会知道是 a 调用了.get()方法还是 b 调用了.get()方法。这就是 self 参数的作用。

由于有了 self 这个关键作用,那么类的众多实例都只会维护着自己的状态信息。解释器会自动地把与实例牵扯在一起的方法绑定到 self 参数上,不会出现认错对象的现象。

第二构造器:

当建立一个类的实例时,例如 a = C()那么圆括号对儿的作用就是启动构造器开始建立类 C 的一个实例,并分配给变量 a 这个对象。构造器的作用就是调用类 C 做事情。

第三初始化:

当建立一个类的实例时,例如 b = C('name')那么圆括号对儿中的参数值会代入到类中的一个名叫 dunder init 实例方法中,这种使用类时提供参数值的用法是由类的实例初始化方法决定的。这与定义函数时有所不同,调用函数时直接把参数名描述在构造器中即可,而类在建立实例时要想使用参数的话,就要在类里写一个 dunder init 实例方法来决定调用类时的初始情况。例如:

class C(object):

def __init__(self, name):

self.name = name

这样的一个类定义完,使用时就只能用作 b = C('name')这种写法。参数 name 的值会分配给实例变量 self.name 这里要注意,右边的 name 参数名是位于本地范围中。

第四封装:

前面提到过命名前使用单个下划线时,会默认作为非公开名。那么实例不能直接使用这类数据。例如:

class C(object):

def __init__(self, name):

self._name = name

def get(self):

return self._name

作为一种通用规则,我们会把所有数据对象处理成非公开形式。这样能够让我们更好的保持所有实例的状态一致性。那么如果我们想要让实例访问这样的数据时,可以定义实例方法来发挥只读数据的行为,或者更新数据的行为。在这种数据结构中,封装内部的表现形式可以增加类的灵活性,可以对类的结构进行重新设计,提升效率。

第五检查错误:

对于例子中的数据类型我们没有做检查步骤,一般来说,名字的内容都应该是字符串类型,那么如果建立实例时使用了其它数据类型的话,虽然可以建立成功,但不是我们所期望的数据类型。如果在数据上进行操作的话,甚至会出现抛出例外错误的情况。

第六检测类:

前面提到过单元测试,最后我们会在 if __name__=='__main__':这个执行区域里去写一些对定义的类的测试代码。

类的定义基本上包含的注意事项就是以上六点,并不是直接写一个类就完成了定义类的工作。

同类推荐
  • 快穿101次:男神,帅炸天!

    快穿101次:男神,帅炸天!

    今朝本想拿块键盘枕着睡,却被一只无良小爪子给拉进了系统里。以前玩攻略游戏,可以随心所欲挑男主,点选项。可现在,她只能苦哈哈地按着小本本走剧情。一旦破戒,还不能实时存档,直接就重来!今朝:不要再让我看到那张脸,厌了厌了,我要换了他。系统:恕难从命。男主:帅炸天的我都不要,是不是瞎?今朝:对,我就是瞎。男主:怪不得连路都不看,直直撞进了我的心里。今朝扶墙:呕……男主一笑:不舒服的话,到我被窝来就好。今朝:……滚!#系统君日常被狗粮塞撑系列#
  • 快穿之朕来了

    快穿之朕来了

    在人类世界有一只傻白兔,她此时正在思考“人生大事”中——‘偶哈哟~偶是一名好心的系统哦~’‘想体验一下爱情嘛?’就这样傻白兔被坑了……(注:还有是月更,平时有时间会来加更,第一本完结会改时间滴!)
  • 不正经的修正诸天

    不正经的修正诸天

    在《隋唐卷》,他是一人之下万人之上的西府赵王,他是《大唐卷》万千学子的锦衣卫督主,他是修炼《葵花宝典》的男人!在《封神卷》,他是文王姬昌的侄子,他是将光怪商会开遍三界各个角落的会长,他是圣人老子的二弟子!在《都市卷》,他是501宿舍的老幺,他是国际交流会上为国争光的国士无双,他是地球的守护神!在《白蛇卷》,他是白素贞身旁的小青蛇,他是草莽英雄许汉文的情敌,他是掀翻三界神佛的一代青帝!........他——就是陆离。一个被地球菌委以重任的男孩。一个懒到连修行都要靠磕功德升级的咸鱼。一个混沌终战中力战而竭的地球守护神......群号797894176
  • 末世之春回大地

    末世之春回大地

    【空间+异能无CP】】黑云遮日,天地异变,地球一朝崩溃,末世降临,且看杜景如何凭借着祖传金钗,在这举步维艰的末世成为强者!
  • 末世重生之我带全家去打怪

    末世重生之我带全家去打怪

    女主苏锦在末世嗝屁后重生回到了末世前一个月,于是开始囤货囤货再囤货,家里人以为苏锦结婚后受到了刺激,正准备组团去暴打“渣男”,才发现世道变化,手里的机票和钱钱都变成了废纸……还是我们的亲亲苏锦有远见啊~~一家人坐在苏锦的空间里感叹道。而此刻的苏锦老公陆浩,身后跟着几名面带苦色的队员,一名队员默默的掰着手指头:”这已经是队长寻妻的第212次迷路了……“
热门推荐
  • 乾坤游龙之龙行天下

    乾坤游龙之龙行天下

    手中掌乾坤,脚下步游龙龙族的没落,揭示种种阴谋站在弱肉强食的大陆,是逃避还是争取?然而现实让你别无选择得不到并不可怕,只怕无力守护追逐强者的脚步让我们来战斗吧我不是大神,但我懂得勤能补拙;文笔差,我就多写多练;没人看只代表我还差得太多,先学爬,再练走,迟早有一天我会飞的...
  • 第一次那么不想长大

    第一次那么不想长大

    你想长大吗?第一次不想长大是什么时候?可能的话我永远都不想长大
  • 前尘劫

    前尘劫

    天地初开,分九霄,九幽和一界。九霄掌管天道;九幽掌管魂道;而鸿蒙界掌管灵道。世事万物,都有变化,鸿蒙界崩,人道混乱,化九界分而治。古有先贤,开创独一无二的修炼体系,带领九界走向未来。从古族走出一个运道少年,从山上下来一个腹黑男子,还有一个早已死了的异类……一盏灯,邪则邪也,何惧世人悠悠之口!一个被封印的图腾异族少年,身背黑棺,只为一个承诺,背负世间无数骂名,誓要把那漫天神佛拉下神坛!境界划分:开尘,醒我,觉秘,定命,升墟,植墟等,未完待续……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 冷霜婵娟

    冷霜婵娟

    苍玄暮,婵娟诞君离殇,素娥侧本为上界冰龙,未料霜心为动原是清冷逝上神,怎想冷情为她融自此,山无棱,天地合,乃敢与君绝!
  • 上邪与君相知长命无绝衰

    上邪与君相知长命无绝衰

    佛说:承诺只怕锦书难托,一念执着,换三生迷离烟火;从始到终我都不是一个贪心之人,想要的也不过如此,奈何命运注定我们生生世世彼此纠缠痛彻心扉……罢了!几世泪水的命运可否换一世白头!
  • 超级房东系统

    超级房东系统

    你为少帅,我为君主,天地之间,当以我为帝!且看少年李天阳如何将出租屋开遍大千宇宙、称霸各方世界,成就房中君主!……ps:本书读者聊天群:540750484
  • 一念成魇

    一念成魇

    村民的一句玩笑话,声称村外有吃人的野兽。从此,谣言四起。整个村庄人心惶惶,夜不外出。不曾想,第一个声称遇到野兽的家伙,真的被野兽活吃了。真的有吃人的野兽?不不不!当谣言出现,无知的人类就会开始恐惧,并且幻想野兽的形状、能力、特性。此念一起,冥冥之中的存在就会有所感应。祂会帮助人类,使得幻想具体化,形成念灵。念灵以念为食。你越惧怕它,它越强大!你认为它会吃人,它就会吃人!想要打败它,不光需要强壮的体魄,更需要坚不可摧的意志!
  • 凤归朝天阙

    凤归朝天阙

    那一日,九重之巅,血流成河。莲华神女仪月灰飞烟灭之时,她唯一的爱徒魔之少神夜君邪,在其耳边轻轻呢喃:“师父,你渡的,是情劫,徒儿犯上了……”三界六道,轮回伊始。仅是一份元神的她,无前尘记忆修为,区区一介凡人,如何在下界涅槃归来,重掌神族?月夜相逢,她举手间绝杀四方,他踏明月清风而来,揭开她的神秘面纱。独孤王摸着下巴感慨:啧啧,这冷血无情、杀伐决断的样子,简直和他如出一辙!他爱了。多年之后,宿命降至,忆起前尘,师徒孽情,何去何从?
  • 从签到开始做大佬

    从签到开始做大佬

    “叮,签到系统启动,今日签到送食为先酒楼一栋!””叮,今日签到送泰源大厦办公楼一栋!”陆庸蒙了。食为先酒楼?魔都最火的酒楼!泰源大厦办公楼一栋?魔都金融办公楼啊!这是要发啊!