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

python

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、私有成员方法(类中行为的封装) 的全部内容, 来源链接: utcz.com/z/389310.html

回到顶部