专栏首页渗透云笔记类和对象(第十二章)

类和对象(第十二章)

对象是什么?对象就是可以抱在怀里使劲揉,然后吃钱的小祖宗,她是怎么构成的,爱钱+任性 = 对象。在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
'天钧'

本文分享自微信公众号 - 渗透云笔记(shentouyun),作者:天钧

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 属性访问

    通常可以通过点(.)操作符的形式去访问对象的属性,关于属性的访问,也有相应的魔法方法来管理,

    天钧
  • 以往的Python文章总结

    笔记;因为Python不像C语言那样的强结构语言,所以我学完C就开始学Python,脑袋嗡嗡的,不过还好,它的赋值很不一般,像C语言第一条应该是先申请一个变量然...

    天钧
  • 反运算(简单的定制)[第十七章]

    关于反运算,这里要注意一点;对于a + b,b的__radd__(self,other),中other是a的对象,self才是b的对象

    天钧
  • 面向对象编程-类

    面向对象编程OOP (object-oriented programming)是最有效的软件编写方法之一,面向对象是利用“类”和“对象”来创建各种模拟来实现对真...

    用户1679793
  • Python每天五分钟-面向对象编程之类

    面向对象编程简称oop(Object Oriented Programming),是一种程序的设计架构。共有三大特性:封装、继承、多态。五大原则:单一职责原则、...

    用户2475223
  • 10-面向对象2

    isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上 。

    用户3106371
  • python记录_day17 类与类之间

    聚合关系:属于关联关系中的一种特例。侧重点是xxx和xxx聚合成xxx,各有各的生命周期。比如电脑,电脑里有CPU、硬盘、内存等,电脑挂了,CPU还是好的,还是...

    py3study
  • 面向对象基础篇

    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

    py3study
  • 第五天:结构型模式--适配器模式

    从现在开始就进入到了第二个模式大类结构型模式。所谓结构型模式就是处理一个系统中不同实体(例如类和对象)之间的关系,关注的是通过一种简单的对象组合方式来创造新的功...

    喵叔
  • Python 学习笔记之类与实例

    类 (class) 封装一组相关数据,使之成为一个整体,并使用一种方法持续展示和维护。

    Python技术与生活认知的分享

扫码关注云+社区

领取腾讯云代金券