zoukankan      html  css  js  c++  java
  • 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

    在上一篇博文里,传入参数时,是在实例化对象后且在调用方法时才传入参数,感觉是不是有点繁琐对吧?可以在实例化的时候就传入参数吗?可以的,这就是本篇博文的要讲到的构造器——__init__(两边双下划线)

    __init__(注意两边是双下划线,后面不再提示)

    1.什么是__init__

    初始化方法,也叫构造器,会在特定条件下自动调用其内的方法

    除了有构造器的作用,和其他方法没什么区别

    2.例子:

    class People(object):
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
        def introduce(self):
            print('我叫%s,今年%s,%s'%(self.name,self.age,self.sex))

    结果:

    这里要注意了,如果使用了构造器,那么在实例化对象时就要传入参数,不能像之前在调用方法时再传入了,这里和python2是一样的。可以对比一下:

    使用构造器:

    不使用构造器:

    不使用构造器时实例属性是调用方法再传入参数,也就是在方法之下的,所以必须在调用时才赋值,你可能想问,我在之前赋值呢?

    果然是报错的。

    当有构造器后,定义类时,可以带括号;可以不带括号;带括号后可以给一个站位参数,也可以不给

    1)不带括号:

    2)带括号不传参:

    3)带括号传参:但是只能传object参数(其实这里前面说过了,带object参数和不带参数不带括号是等价的

     所以,注意分清使用构造器和不使用构造器的区别就行。而使用构造器可以带来诸多方便(上面的例子已经可以看出)。在实际的开发中还是建议使用构造器

    其实你有没有觉得,把人类和这一板块提到的类做抽象的比较,有很多相似的地方对不?每个人都不同,都是独一无二的,各自都会有自己的小秘密不希望其他任何人知道,那么类也有这样的情况——公有属性和私有属性

    公有属性和私有属性

    1.什么是公有,什么是私有

    就是字面意思,公有就是大家都能访问,都知道的属性,私有属性就是类的独特属性,不公开的。

    2.怎么判断哪个公有,哪个是私有

    不能被直接访问的就是私有属性,在前面用了那么多,能够直接调用就可以访问的就是私有属性

    3.定义公有和私有

    因为类是我们人为定义的,所以公有属性和私有属性也是人为定义的,且看例子:

    那么你看出来了,双下划线和单下划线开头的原则上都不能被外部访问的。但是单下划线是伪私有属性,给上全称就可以访问了,但是双下划线不行,前面加双下划线就是我们的私有属性

     其实,双下划线也是伪私有属性,一样可以访问的,请看:

     

     只要按照格式:实例化对象._类名__私有属性名 就可以访问。

    并且再看一个例子:

    像这样利用调用方法来返回私有属性一样可以访问。

    所以,双下横线和单下横线开头的原则上都不能被外部访问,但是在python中的私有变量,都是伪私有

  • 相关阅读:
    GAN生成对抗网络-DCGAN原理与基本实现-深度卷积生成对抗网络03
    【我的遇见】
    【笔记汇总贴】
    vtr搭建并使用ipv6免流上校园网教程(CentOs8避坑指南)
    国科大抢课避坑+选课指南+教务系统操作
    论文:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering-阅读总结
    bernoulli, multinoulli distributions 讲解
    论文:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention-阅读总结
    论文:Show and Tell: A Neural Image Caption Generator-阅读总结
    【吴恩达课程使用】pip安装pandas失败-anaconda各种玄学T-T-从新开始搭建环境
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/7676447.html
Copyright © 2011-2022 走看看