洗礼灵魂,修炼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中的私有变量,都是伪私有
洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python之面向对象编程学习
不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...
- Python:面向对象编程3 定制类(有更新)
Python:面向对象编程3 定制类(有更新) ⚠️本文主要内容为对Data model相关知识点的提取学习记录.(内容来自文档和部分网页教程案例) ⚠️:这个连接指向<流畅的python&g ...
- 【Python】[面向对象编程] 访问限制,继承和多态
1.在Python中两个下划线__ 就是带便私有属性 private 注意已两个下划线开头并且结尾的 如 __init__ 是特殊变量,不是私有变量 2.多态,Python的“file-like ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- python之面向对象编程
1.面向对象介绍: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种类 只要是对象,就肯定有属性 2. 面向对象的几个特性: class类: 一个类即对一类拥有相同属性的对象的抽象, ...
- 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) # ...
- python的面向对象编程
面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...
- 一文看懂Python的面向对象编程
之前在网络上看了很多关于面向对象的编程详解,还是不够过瘾,所以决定自己动手写一篇. 面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计. 类(Class) ...
- python学习——面向对象编程
关于python面向对象编程,请参考: https://blog.csdn.net/zhoudaxia/article/details/23341261
随机推荐
- Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
Git使用教程:最详细.最傻瓜.最浅显.真正手把手教! 蘇小小 Web项目聚集地 9月16日 作者 | 蘇小小 编辑 | 王久一 来源 | 慕课网 导读:因为教程详细,所以行文有些长,新手边看边操作效 ...
- springboot创建统一异常拦截器全局处理 异常
1.创建Exception类 public class MyException extends RuntimeException { private ErrorCodeEnum errorCode; ...
- 分布式协调服务ZooKeeper的典型应用
Zookeeper典型应用 参考官方文档: http://zookeeper.apache.org/doc/current/recipes.html Out of the Box Applicatio ...
- Hadoop生态系统之Yarn
Apache YARN(Yet Another Resource Negotiator) 是Hadoop的集群资源管理系统.YARN被引入Hadoop2最初是为了改善MapReduce的实现,但它具有 ...
- 从零开始学 Web 之 BOM(四)client系列
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 使用 Linux 自带的 logrotate 程序来控制日志文件尺寸
1. 编写配置文件,内容如下(以 Amadeus 系统为例): 编写配置文件,放在 /etc/logrotate.d/xxxx 下,其中 xxxx 是自己取的名字,无需后缀.例如 Amadeus 系统 ...
- vue-04-组件
1, 介绍 vue最强大的功能, 可以扩展html元素, 封装可充用的代码 在较高的层面, 组件是自定义元素, vue的编译器为他添加特殊功能, 在有些情况下, 组件也可以表现为用 ls 特性进行扩展 ...
- MySQL中MyISAM和InnoDB两种主流存储引擎的特点
一.数据库引擎(Engines)的概念 MySQ5.6L的架构图: MySQL的存储引擎全称为(Pluggable Storage Engines)插件式存储引擎.MySQL的所有逻辑概念,包括SQL ...
- c++中虚函数和多态性
1.直接看下列代码: #include <iostream> using namespace std; class base{ public: void who(){ cout<&l ...
- swiper下滑分页,减少swiper-slide项的时候会出现空白
修改子项后,先重置当前的页,调用 swiper.slideTo(0); 滚动到初始位置 再调用 swiper.update(); 更新一系列设置就可以了.