洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

时间:2022-09-05 19:04:34

在上一篇博文里,传入参数时,是在实例化对象后且在调用方法时才传入参数,感觉是不是有点繁琐对吧?可以在实例化的时候就传入参数吗?可以的,这就是本篇博文的要讲到的构造器——__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))

结果:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

使用构造器:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

不使用构造器:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

果然是报错的。

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

1)不带括号:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

2)带括号不传参:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

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

公有属性和私有属性

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

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

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

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

3.定义公有和私有

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

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

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

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

并且再看一个例子:

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性

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

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

洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  3. Python:面向对象编程3 定制类(有更新)

    Python:面向对象编程3  定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...

  4. 【Python】&lbrack;面向对象编程&rsqb; 访问限制,继承和多态

    1.在Python中两个下划线__ 就是带便私有属性 private   注意已两个下划线开头并且结尾的 如 __init__ 是特殊变量,不是私有变量 2.多态,Python的“file-like ...

  5. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  6. python之面向对象编程

    1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...

  7. Python(面向对象编程—1)

    class tst: l=[] x=1 a=tst() b=tst() a.l.append('a') b.l.append('b') a.x='a' b.x='b' print(a.l,a.x) # ...

  8. python的面向对象编程

    面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...

  9. 一文看懂Python的面向对象编程

    之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...

  10. python学习——面向对象编程

    关于python面向对象编程,请参考: https://blog.csdn.net/zhoudaxia/article/details/23341261

随机推荐

  1. 【大前端之打通账号系统】passport应该如何落地?

    前言 之前接入百度账号系统的时候写了一篇博客做研究:[大前端]认识单点登录,出来后才发现,很多小公司其实并没有将账号系统打通,总结一下账号系统没通的原因是: ① 最初设计就没想过身份认证应该做整合 ② ...

  2. jqMobile中的dialog和popup的区别

    主要区别是:dialog默认含回退按钮.并且dialog在1.4版中已经过时,1.5中将会移除. 下面是 原文1: Using a Dialog Window as a Popup A jQuery ...

  3. Maven-搭建普通maven项目

    点击Eclipse菜单栏File->New->Ohter->Maven得到如下图所示对话框: 选中Maven Project并点击Next,到下一个对话框(默认)继续点击Next得到 ...

  4. Unit Test相关问题汇总

    1.测试私有方法(1)使用反射 public class Calcutate { public int test() { return add(2, 3); } private int add(int ...

  5. Cortex-M3知识点

    1.不再像别的ARM7那样从thumb状态和ARM状态来回切换 Thumb-2指令集横空出世,Cortex-M3不支持ARM指令集 2.BKP备份寄存器(42个16位寄存器组成),用来存储用户应用程序 ...

  6. javascript 省市区三级联动 附: json数据

    html: <label> <span>购买地址</span> <select name="PurchaseProvince" style ...

  7. bat脚本(转)

    偶尔用到,搜到不错的资料,所以转一下: windows bat脚本for循环中对变量循环赋值 http://blog.csdn.net/u010161379/article/details/50956 ...

  8. keras 设置GPU使用率

     import tensorflow as tffrom keras.backend.tensorflow_backend import set_session config = tf.ConfigP ...

  9. apache2&period;4 httpd&period;conf httpd-vhost&period;conf配置

    extra / httpd-vhost.conf <VirtualHost *:81> DocumentRoot "/data/sda1_data/" ServerNa ...

  10. uva 12222 Mountain Road

    题意: 有一个单行道,两个方向都有车在等待.给出每个车的方向以及到达的时间以及走完这段路所需要的时间. 为了防止车祸,同向两车通过任一点的时间间隔不得小于10s. 求最后一辆车离开时刻的最小值. 思路 ...