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. mysql按照时间分组查询

    mysql 按年.月.周.日分组查询 1.按照年份分组查询 SELECT DATE_FORMAT(t.bill_time,'%Y') month_time,sum(t.pay_price) total ...

  2. Java的JDBC

    第一个JDBC程序 创建测试数据库 CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci; USE jdbcStud ...

  3. java下拉框转换公共方法

    1. 下拉框实例类 import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang3.Boolean ...

  4. 【刷题-LeetCode】239. Sliding Window Maximum

    Sliding Window Maximum Given an array nums, there is a sliding window of size k which is moving from ...

  5. prometheus基本概念(思维导图)

    参考文章: prometheus词汇表 prometheus的summary和histogram指标的简单理解

  6. sql中常用到的GUID

    在项目的数据库中经常见到如下所示的列: 列名:**_id 数据类型:UNIQUEIDENTIFIER 默认:NEWID() ROWGUIDCOL 属性. 其实这样的列通常为表的主键,函数NEWID() ...

  7. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析

    设计背景 消息中间件的本身定义来考虑,应该尽量减少对于外部第三方中间件的依赖.一般来说依赖的外部系统越多,也会使得本身的设计越复杂,采用文件系统作为消息存储的方式. RocketMQ存储机制 消息中间 ...

  8. kubernetes之部署dashboard 和heapster

    部署dashboard之前,先确保traefik https方式部署成功,这样就可以通过 https 域名的方式访问dashboard,无需kube-proxy转发了.假设traefik-ingres ...

  9. Windows 10 Version 21h1安装

    好久没安装过Windows 10系统了,这两天在下载电脑管家时,使用bing搜索,没注意就选择了第一个,安装后,噩梦就来了,非法广告.各种软件的推送,怎么也清不干净. 没办法,到PCBeta下载了最新 ...

  10. __rept__和__str__

    最近一下子学了很多的知识点,导致我有点没反应过来,粗略的在草稿纸记了点自己的想法,趁休息的时间将它敲到博客里面去,免得丢失,这一篇写的挺废话的,有点啰嗦,本篇的重点是第二段程序后开始的总结和后面的几个 ...