洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
2018-03-07 21:15
1006 查看
在上一篇博文里,传入参数时,是在实例化对象后且在调用方法时才传入参数,感觉是不是有点繁琐对吧?可以在实例化的时候就传入参数吗?可以的,这就是本篇博文的要讲到的构造器——__init__(两边双下划线)
这里要注意了,如果使用了构造器,那么在实例化对象时就要传入参数,不能像之前在调用方法时再传入了,这里和python2是一样的。可以对比一下:使用构造器:
不使用构造器:
不使用构造器时实例属性是调用方法再传入参数,也就是在方法之下的,所以必须在调用时才赋值,你可能想问,我在之前赋值呢?
果然是报错的。
所以,注意分清使用构造器和不使用构造器的区别就行。而使用构造器可以带来诸多方便(上面的例子已经可以看出)。在实际的开发中还是建议使用构造器 其实你有没有觉得,把人类和这一板块提到的类做抽象的比较,有很多相似的地方对不?每个人都不同,都是独一无二的,各自都会有自己的小秘密不希望其他任何人知道,那么类也有这样的情况——公有属性和私有属性
那么你看出来了,双下划线和单下划线开头的原则上都不能被外部访问的。但是单下划线是伪私有属性,给上全称就可以访问了,但是双下划线不行,前面加双下划线就是我们的私有属性了 其实,双下划线也是伪私有属性,一样可以访问的,请看:
只要按照格式:实例化对象._类名__私有属性名 就可以访问。并且再看一个例子:
像这样利用调用方法来返回私有属性一样可以访问。 所以,双下横线和单下横线开头的原则上都不能被外部访问,但是在python中的私有变量,都是伪私有
__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(39)--面向对象编程(9)—魔法方法表
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
- 洗礼灵魂,修炼python(37)--面向对象编程(7)—了解魔法方法
- 【python】类中一些特殊方法和特殊变量介绍__init__(),私有变量
- 洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解
- Python的私有属性的特殊访问方法
- 洗礼灵魂,修炼python(32)--面向对象编程(2)—进一步认识类
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
- 洗礼灵魂,修炼python(36)--面向对象编程(6)—类的相关内置函数issubclass,hasattr等
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- python 对私有属性(方法)的访问 的函数
- 洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常
- 洗礼灵魂,修炼python(6)--活起来的代码+列表
- 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assign
- Python 进阶_OOP 面向对象编程_类属性和方法
- python对象与属性相关的特殊方法
- js面向对象的公有、私有属性和方法
- Python(私有变量)类中的特殊方法