Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的。

关于私有方法其实和私有属性差不多,有如下要点:

  • 1、通常我们约定,两个下划线开头的方法是私有方法。
  • 2、类内部可以访问私有方法。
  • 3、类外部不能直接访问私有方法,也就是不同通过对象.方法名直接调用。
  • 4、类外部可以通过 _类名__私有方法名访问私有方法。

示例:

# 在函数名的前面添加两个下划线,此时该函数被称为私有函数
# 只能在当前类中被直接调用,不同通过对象.方法名调用
# 私有函数
class Student():
def __init__(self, name, age):
# 普通变量
self.name = name
# 私有变量
self.__age = age def tellMe(self):
print(f"大家好,我是{self.name}。是一个公共方法") # 在公共函数中调用私有方法,
# 调用格式:self.__私有的函数名称(参数列表)
self.__tellMeAll() # 定义一个私有方法
def __tellMeAll(self):
print(f"我{self.__age}岁,但我一般不告诉别人。是一个私有方法") # 在公共函数中调用私有方法,
# 调用格式:self.__私有的函数名称(参数列表) # 创建一个Student对象
stu = Student("美猴王", 18) # 调用公共方法
"""
输出结果:
大家好,我是美猴王。是一个公共方法
我18岁,但我一般不告诉别人。是一个私有方法 从结果中可以看到,公共方法可以直接通过对象.方法名直接调用。
私有方法可以再对象中被调用。
"""
stu.tellMe() # 通过对象.方法名直接调用私有方法
# 报错
# AttributeError: 'Student' object has no attribute '__tellMeAll'
# stu.__tellMeAll() # 通过对象.方法名直接调用私有方法
# 没有报错
# 输出:我18岁,但我一般不告诉别人。是一个私有方法
stu._Student__tellMeAll()

类中的成员私有优化原理总结:

  • Python默认的成员函数和成员变量都是公开的,而在Python中私有属性和私有方法是没有类似Java语言的publicprivate等关键词来修饰的。
  • 在Python中定义私有变量,只需要在变量名或函数名前加上 __两个下划线,那么这个函数或变量就Python中的私有成员了。
  • 这是在Python内部使用一种 name mangling 技术,将 __membername替换成 _classname__membername,所以你在类(对象)外部使用原来的私有成员的名字时,会提示找不到。

『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)的更多相关文章

  1. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  2. 『无为则无心』Python面向对象 — 45、面向对象编程

    目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...

  3. 『无为则无心』Python面向对象 — 46、类和对象

    目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...

  4. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  5. 『无为则无心』Python面向对象 — 47、Python中的self详解

    目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...

  6. 『无为则无心』Python面向对象 — 54、重写和super()函数

    目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...

  7. 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员

    目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...

  8. 『无为则无心』Python面向对象 — 58、类方法和静态方法

    目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...

  9. 『无为则无心』Python面向对象 — 59、魔法方法

    目录 1.魔法方法__new__() 2.魔法方法__init__() 3.魔法方法__del__() 4.魔法方法__str__()和__repr__() 5.魔法方法__call__() 6.魔法 ...

随机推荐

  1. Java实现二叉搜索树的插入、删除

    前置知识 二叉树的结构 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode( ...

  2. 1013day-人口普查系统

    1.shuchu.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  3. 数据库DDL、DML、DCL、DQL、DPL、CCL的全称和使用

    数据库DDL.DML.DCL.DQL.DPL.CCL的全称和使用 简介: SQL (Structure Query Language):结构化查询语言,一种特殊目的的编程语言,一种数据库查询和程序设计 ...

  4. Filter的生命周期及FilterConfig类介绍

    Filter的生命周期包含几个方法 1,构造器方法 2,init初始化方法 第1,2步,在web工程 3,doFilter过滤方法 每次拦截到请求,就会执行 4,destroy销毁方法 停止web工程 ...

  5. xargs、管道、exec区别

    作者:ilexwg链接:https://www.zhihu.com/question/27452459/answer/170834758来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  6. python代码加注释--6

    备注:#用来注释代码,#后面的内容会被python解释器忽略

  7. JVM诊断及工具笔记(2)使用arthas定位哪里执行了System#gc()

    笔者是汽车之家实时计算平台的一名小伙伴.负责flink平台,数据湖及kafka平台的设计与开发.平时擅长做平台设计,定位及解决各种疑难杂症.第二篇文章,讲的点依旧很小,但是这次图多!!! 在这里感谢支 ...

  8. pycharm 安装插件

    1.使用pip安装插件 pip安装指定版本的插件: pip install openpyxl==2.6.2 -i https://pypi.doubanio.com/simple/ -i后面跟的是&q ...

  9. JavaScript之 函数节流(Throttling) 与 防抖(Debounce)

    Throttling:在监听鼠标移动事件.盒子滚动事件等使用节流技术能节省性能消耗 /** * 节流函数(每隔t执行一次) */ function Throttling(fn, t) { const ...

  10. 求一个number数组中的最大值和最小值的差

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...