前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类和对象(第十二章)

类和对象(第十二章)

作者头像
天钧
发布2019-07-26 17:12:29
2880
发布2019-07-26 17:12:29
举报
文章被收录于专栏:渗透云笔记渗透云笔记

对象是什么?对象就是可以抱在怀里使劲揉,然后吃钱的小祖宗,她是怎么构成的,爱钱+任性 = 对象。在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.__name
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    cc.__name
AttributeError: 'Potato' object has no attribute '__name'

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

源代码

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

运行

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

还可以这样哦

>>> o._Potato__name
'天钧'
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档