公共属性

在 Python 的类里面,所有属性和方法默认都是公共的

class PoloBlog:# 公共属性sum = 0# 构造方法def __init__(self, name):self.name = name# 公共方法def test(self):...

但Python也可以设置受保护、私有类型的变量or方法

私有类型的属性、方法

  • 在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到
  • 私有属性:就是对象不希望公开访问的属性
  • 私有方法:就是对象不希望公开访问的方法

定义方式,类图

在属性、方法名前加两个下划线就是私有属性、私有方法了

代码

# 私有属性、方法
class Person:# 构造方法def __init__(self, name, age):self.name = nameself.__age = age# 实例方法def pinrtMsg(self):print("name:", self.name, " age:", self.__age)# 私有方法def __getAge(self):print("age is ", self.__age)person = Person("小菠萝", 24)
# 直接调用私有属性、私有方法 - 会报错
print(person.__age)
print(person.__getAge)# 输出结果print(person.__age)
AttributeError: 'Person' object has no attribute '__age'print(person.__getAge)
AttributeError: 'Person' object has no attribute '__getAge'

看看 Pycharm 的代码联想

压根不会联想,因为是私有属性、私有方法,不允许在对象外部被使用

通过公共方法访问私有属性

person = Person("小菠萝", 24)
person.printMsg()# 输出结果
name: 小菠萝  age: 24

类属性私有化

# 类属性的私有化
class Person:__sum = 0@classmethoddef getSum(cls, num):# 调用私有类方法cls.__sumAdd(num)print(cls.__sum)@classmethoddef __sumAdd(cls, num):cls.__ 

重点

  • 子类无法访问父类的私有变量、方法
  • 私有变量只有本类的内部能直接调用
  • But!外部真的不能访问吗?

伪私有属性和私有方法

  • 其实 Python 中,并没有真正意义上的私有,仍然可以在外部访问私有属性、私有方法
  • 因为,在给私有属性、方法命名时,实际是对名称做了一些特殊处理,使得外界无法访问到
  • 处理方式:在名称前面加上 _类名 ,私有属性、方法就会变成  _类名__名称
# 间接调用
class Person:__sum = 0# 构造方法def __init__(self, name):self.__name = name# 私有方法def __getName(self):print("name is ", self.__name)# 调用类私有属性
print(Person._Person__sum)person = Person("小菠萝")# 调用私有属性
print(person._Person__name)
# 调用私有方法
person._Person__getName()# 输出结果
0
小菠萝
name is  小菠萝

无论是类对象还是实例对象,都可以通过 ._类名__名称 来调用私有属性、方法,这算是一种间接调用

受保护类型的属性、方法

  • 受保护类型一般会称为:protect 属性,学过 Java 的应该都了解
  • 在属性和方法前加一个下划线就是 protect 类型了,私有类型是两个下划线
# 受保护类型
class PoloBlog:_sum = 0.0# 构造方法def __init__(self, name):self._name = name# 保护方法def _printName(self):print(self._name)# 类方法@classmethoddef _classMethod(cls):print(cls._sum)blog = PoloBlog("小菠萝")
# 打印保护类型的类属性
print(PoloBlog._sum)# 打印保护类型的实例属性
print(blog._name)# 实例对象调用保护类型的实例方法
blog._printName()# 实例对象调用保护类型的类方法
blog._classMethod()# 类对象调用保护类型的类方法
PoloBlog._classMethod()# 输出结果
0.0
小菠萝
小菠萝
0.0
0.0

知识点

  • 父类的 protect 属性,子类可以继承
  • 实例对象、类对象都能直接调用 protect 属性、方法

总的来说,和公共变量没有什么特别大的区别

总结

无论是受保护型变量还是私有变量,其实在外部还是能访问的,所以并不能真正控制属性的访问权限

Python - 面向对象编程 - 公共属性、保护属性、私有属性相关推荐

  1. 【Python面向对象编程】第08篇 私有变量

    本篇我们介绍封装(encapsulation)的概念,以及如何在 Python 中利用私有属性实现封装. 封装的概念 面向对象编程包含四个基本的概念:抽象.封装.继承以及多态.封装是指将数据和功能包装 ...

  2. Python零基础速成班-第10讲-Python面向对象编程(下),Property属性、特殊方法、设计模式、链表应用

    Python零基础速成班-第10讲-Python面向对象编程(下),Property属性.特殊方法.设计模式.链表应用 学习目标 面向对象编程 接上一讲:Property属性.特殊方法.设计模式 面向 ...

  3. python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...

    Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...

  4. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  5. 【Python基础】Python 面向对象编程(上篇)

    我的施工计划图 已完成专题包括: 1我的施工计划 2数字专题 3字符串专题 4列表专题 5流程控制专题 6编程风格专题 7函数使用专题 今天是面向对象编程的上篇:基础专题 Python 面向对象编程 ...

  6. Python 面向对象编程基础

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

  7. python基础系列教程——python面向对象编程全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...

  8. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  9. 如何理解Python 面向对象编程思想

    Python 面向对象编程思想 1. 宽泛的面向对象的概念 举例说明 面向过程:做一件事情,从头到尾,每一个细节都要关注,重点在于过程 面向对象:做一件事情,用对象去做,不关心细节和过程,万物皆对象 ...

  10. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

最新文章

  1. 【问题收录】ImportError No module named MySQLdb 问题解决
  2. 6 种激活函数核心知识点,请务必掌握!
  3. AppStore发布产品步骤
  4. mapreduce简单的gzip压缩
  5. windows bat 批处理 !vm 合并快播文件
  6. 浮点数的表示和基本运算 【转载】
  7. Laravel源码解析之QueryBuilder
  8. 使用trace_event跟踪进程的一生
  9. 求一个容器的最值的索引_初中数学:一道几何好题,学会“胡不归问题”动点最值解题方法...
  10. 构建dubbo分布式平台-window安装zookeeper注册中心
  11. incrby redis 最大值_Redis 的 8 大数据类型,写得非常好!
  12. flink checkpoint 重启_Flink进阶教程:Checkpoint机制原理剖析与参数配置
  13. CoreData手动创建托管对象子类时报错
  14. Oracle DBA遇到频次最高的五十多个问题
  15. python读取svg转emf_玩玩矢量图标,SVG转换EMF
  16. matlab脚本栏中间有条线,word中间有一根线 word中间有一条线如何去掉
  17. kubernetes CKA题库(附答案、视频)
  18. 3天3万视频课程的笔记
  19. iOS 9的App Thinning方案如何节省存储空间
  20. python 交互redis 的ZADD方法异常: AttributeError: ‘int‘ object has no attribute ‘items‘

热门文章

  1. matlab 复化求积公式,matlab复化Simpson求积公式计算数值积分
  2. java创建exchange邮箱_创建Exchange邮箱用户
  3. mac无法读取移动硬盘怎么办?mac怎么使用ntfs硬盘
  4. python爬取花瓣网图片
  5. 32.项目总结--技术点部分
  6. 苹果怎么测是原装屏_原装屏、后压屏、组装屏、压排屏?手机换屏不知道怎么选?Get此文你就明白了...
  7. 2020年最酷的十个无人机项目(下)
  8. 人工智能对数据分析师的影响
  9. java BBS论坛
  10. int数组java,java定义int数组