『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)
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语言的
public,private等关键词来修饰的。 - 在Python中定义私有变量,只需要在变量名或函数名前加上
__两个下划线,那么这个函数或变量就Python中的私有成员了。 - 这是在Python内部使用一种
name mangling技术,将__membername替换成_classname__membername,所以你在类(对象)外部使用原来的私有成员的名字时,会提示找不到。
『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)的更多相关文章
- 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)
目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...
- 『无为则无心』Python面向对象 — 45、面向对象编程
目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...
- 『无为则无心』Python面向对象 — 46、类和对象
目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...
- 『无为则无心』Python面向对象 — 53、对Python中封装的介绍
目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...
- 『无为则无心』Python面向对象 — 47、Python中的self详解
目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...
- 『无为则无心』Python面向对象 — 54、重写和super()函数
目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...
- 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员
目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...
- 『无为则无心』Python面向对象 — 58、类方法和静态方法
目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...
- 『无为则无心』Python面向对象 — 59、魔法方法
目录 1.魔法方法__new__() 2.魔法方法__init__() 3.魔法方法__del__() 4.魔法方法__str__()和__repr__() 5.魔法方法__call__() 6.魔法 ...
随机推荐
- 移动Web开发实践——解决position:fixed自适应BUG
在移动web中使用position:fixed,会踩到很多坑,在我之前的一篇文章<移动端web页面使用position:fixed问题总结>中已经总结了很多bug,但是在后续的开发中有关f ...
- 简单Spring MVC项目搭建
1.新建Project 开发环境我使用的是IDEA,其实使用什么都是大同小异的,关键是自己用的顺手. 首先,左上角File→New→Project.在Project页面选择Maven,然后勾上图中所示 ...
- Discuz!X ≤3.4 任意文件删除漏洞
Discuz!X ≤3.4 任意文件删除漏洞 简述 漏洞原因:之前存在的任意文件删除漏洞修复不完全导致可以绕过. 漏洞修复时间:2017年9月29日官方对gitee上的代码进行了修复 漏洞原理分析 在 ...
- 【记录一个问题】macos下使用opencl, clSetEventCallback不生效
一开始的调用顺序是这样: enqueueWriteBuffer enqueueNDRangeKernel enqueueReadBuffer SetEventCallback 执行后主程序用getch ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(1)——GraphQL及示例项目介绍
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 前言 这篇文章是这个系列的第一篇,我们会简单地讨论一下GraphQL,然后介绍一下这个系列将会使用的示例项目. 关 ...
- 轻量级orm框架——gzero指南
开发过web系统人一定对大量的curd不陌生,为了提高效率我们通常会使用一些orm框架做辅助,而不会直接操作数据库.但是现有的orm框架往往有两个通病(各种语言的都一样):1. API复杂:即使是有经 ...
- gin中映射查询字符串或表单参数
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { r := gin. ...
- Kubernetes-Secret
1. 简介 Secret 是一种包含少量敏感信息例如密码.令牌或密钥的对象. 这样的信息可能会被放在 Pod 规约中或者镜像中. 使用 Secret 意味着你不需要在应用程序代码中包含机密数据. 由于 ...
- 在 Prim 算法中使用 pb_ds 堆优化
在 Prim 算法中使用 pb_ds 堆优化 Prim 算法用于求最小生成树(Minimum Spanning Tree,简称 MST),其本质是一种贪心的加点法.对于一个各点相互连通的无向图而言,P ...
- Android开发-主要的dialog
dialog是弹出式窗口,点击后会以窗口的形式弹出 主要有添加备注,日历选择等,通过设置事件监听,将dialog弹出来 package com.example.Utils.fragment; impo ...