类和对象(第十二章)

释放双眼,带上耳机,听听看~!

对象是什么?对象就是可以抱在怀里使劲揉,然后吃钱的小祖宗,她是怎么构成的,爱钱+任性 = 对象。在Python里也一样 对象=属性+方法。

是不是有种异曲同工之妙呢?答案是有个屁!

属性其实就是变量,方法就是咱们学过的函数,这样一想还是有联系的

如一个对象的特征叫做属性并且一个对象的行为叫做方法

看代码

 小乌龟源代码

class Turtle: #python 中的类名约定以大写字母开头 #特征的描述称为属性,在代码层次来看其实就是变量 color = "green" weigth = 10 legs = 4 shell = True mouth = '大嘴'
#方法实际就是函数,通过调用这些函数来完成某些工作 def climb(self): print("我正在努力地往前爬") def run(self): print("我正在飞快的像前爬") def bite(self): print("咬死你咬死你") def eat(self): print("有吃的了") def sleep(self): print("困了,睡觉了,告辞")

调用

>>> tt = Turtle()>>> tt.climb()我正在努力地往前爬>>> 

笔记;

在源代码的层次上,还不叫一个对象,而是称源代码为一个class类,大家可能会注意到定义一个函数后跟了个陌生的参数(self)这个是什么呢?

在同一个class类里会生成无数个对象,也就是咱们常听到的面对修修爱那个编程,调用对象里的方法与函数也一样,先举个例子,理解下self的重要性

>>> aa = Buall()>>> aa.setName("woshi")>>> bb = Buall()>>> bb.setName("天钧")>>> aa.kick()我叫woshi,奥 我是谁?!>>> bb.kick()我叫天钧,奥 我是谁?!>>> 

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。 虽然你可以给这个参数任何名称,但是 强烈建议 你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些ide(集成开发环境)也可以帮助你。

现在我们先记住一个class类必须有一个好基友self

初探Python魔法方法

从前有个魔仙堡,里面有着许多的Python对象,他们天生就会魔法,所以他们把握着面对对象,他们会给你的类增加魔力,是不是很神奇呢?

Python的魔法方法都是用两个下划线封印起来的,还是很好辨认

法术__init__()构造方法。

__init__方法的魔力体,现在只要实例化一个对象,这个方法就会在对象被创建时自动调用,其实实例化对象时是可以传入参数的,这些参数会自动传入__init__()方法中,可以通过重写这个方法来自定义独享的初始化操作。

class Potato: def __init__(self,name): self.name = name def kick(self): print("我叫%s,奥我擦" % self.name)

运行为

>>> ss = Potato("卧槽卧槽")>>> ss.kick()我叫卧槽卧槽,奥我擦

实例化对象,你懂了多少,就是class带参数嘛,先存疑,魔法方法讲

公有与私有

一般的面对对象编程语言都会区分公有与私有的数据类型,像C++和Java他们的public和private关键字,用于声明数据是公有还是私有,但在Python中并没有用类似的关键词来修饰,所以本章到这里就结束了,告辞

默认上的对象属性和方法都是公开的,就像衣不隐体的美少女那样,可以通过(.)来访问。万恶之源

源代码

class Potato: name = "卧槽,臭流氓"

运行后

>>> cc = Potato()>>> cc.name'卧槽,臭流氓'

为了实现私有变量,Python有个name mangling的技术(不是我说的,小甲鱼说得,我也没听过在变量名或者函数名前添加__两个英文的下划线,那么这个函数或者变量就是私有的了,不就是“半封印”嘛,魔法方法是全封印,秒懂,我真是机智的一比 

源代码

class Potato: __name = "卧槽,臭流氓"

运行后

>>> cc = Potato()>>> cc.__nameTraceback (most recent call last): File "<pyshell#38>", line 1, in <module> cc.__nameAttributeError: 'Potato' object has no attribute '__name'

那没法访问了丫,咋办,从内部访问

源代码

class Potato: def __init__(self,name): self.__name = name def getName(self): return self.__name

运行

>>> o = Potato("天钧")>>> o.__nameTraceback (most recent call last): File "<pyshell#45>", line 1, in <module> o.__nameAttributeError: 'Potato' object has no attribute '__name'>>> o.getName()'天钧'>>> 

还可以这样哦

>>> o._Potato__name'天钧'

下一章继承

本文源自微信公众号:渗透云笔记

人已赞赏
安全工具

CanHackMe | CTF平台搭建记录

2019-10-16 17:19:13

安全工具

实战|一个企业官网上线前的渗透测试

2019-10-16 17:19:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索