Python - 面向对象编程 - 公共属性、保护属性、私有属性
公共属性
在 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 - 面向对象编程 - 公共属性、保护属性、私有属性相关推荐
- 【Python面向对象编程】第08篇 私有变量
本篇我们介绍封装(encapsulation)的概念,以及如何在 Python 中利用私有属性实现封装. 封装的概念 面向对象编程包含四个基本的概念:抽象.封装.继承以及多态.封装是指将数据和功能包装 ...
- Python零基础速成班-第10讲-Python面向对象编程(下),Property属性、特殊方法、设计模式、链表应用
Python零基础速成班-第10讲-Python面向对象编程(下),Property属性.特殊方法.设计模式.链表应用 学习目标 面向对象编程 接上一讲:Property属性.特殊方法.设计模式 面向 ...
- python面向对象编程中方法和属性_Python面向对象编程中关于类和方法的学习笔记...
Python面向对象编程中关于类和方法的学习笔记 类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下 类和实例 pytho ...
- python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!
原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...
- 【Python基础】Python 面向对象编程(上篇)
我的施工计划图 已完成专题包括: 1我的施工计划 2数字专题 3字符串专题 4列表专题 5流程控制专题 6编程风格专题 7函数使用专题 今天是面向对象编程的上篇:基础专题 Python 面向对象编程 ...
- Python 面向对象编程基础
Python面向对象编程 简介:面向对象编程--Object Oriented Programming,简称 OOP,是一种程序设计思想.OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据 ...
- python基础系列教程——python面向对象编程全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- 如何理解Python 面向对象编程思想
Python 面向对象编程思想 1. 宽泛的面向对象的概念 举例说明 面向过程:做一件事情,从头到尾,每一个细节都要关注,重点在于过程 面向对象:做一件事情,用对象去做,不关心细节和过程,万物皆对象 ...
- 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结
前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...
最新文章
- 【问题收录】ImportError No module named MySQLdb 问题解决
- 6 种激活函数核心知识点,请务必掌握!
- AppStore发布产品步骤
- mapreduce简单的gzip压缩
- windows bat 批处理 !vm 合并快播文件
- 浮点数的表示和基本运算 【转载】
- Laravel源码解析之QueryBuilder
- 使用trace_event跟踪进程的一生
- 求一个容器的最值的索引_初中数学:一道几何好题,学会“胡不归问题”动点最值解题方法...
- 构建dubbo分布式平台-window安装zookeeper注册中心
- incrby redis 最大值_Redis 的 8 大数据类型,写得非常好!
- flink checkpoint 重启_Flink进阶教程:Checkpoint机制原理剖析与参数配置
- CoreData手动创建托管对象子类时报错
- Oracle DBA遇到频次最高的五十多个问题
- python读取svg转emf_玩玩矢量图标,SVG转换EMF
- matlab脚本栏中间有条线,word中间有一根线 word中间有一条线如何去掉
- kubernetes CKA题库(附答案、视频)
- 3天3万视频课程的笔记
- iOS 9的App Thinning方案如何节省存储空间
- python 交互redis 的ZADD方法异常: AttributeError: ‘int‘ object has no attribute ‘items‘
热门文章
- matlab 复化求积公式,matlab复化Simpson求积公式计算数值积分
- java创建exchange邮箱_创建Exchange邮箱用户
- mac无法读取移动硬盘怎么办?mac怎么使用ntfs硬盘
- python爬取花瓣网图片
- 32.项目总结--技术点部分
- 苹果怎么测是原装屏_原装屏、后压屏、组装屏、压排屏?手机换屏不知道怎么选?Get此文你就明白了...
- 2020年最酷的十个无人机项目(下)
- 人工智能对数据分析师的影响
- java BBS论坛
- int数组java,java定义int数组