前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

【Python】面向对象 - 封装 ② ( 访问私有成员 | 对象无法访问私有变量 / 方法 | 类内部访问私有成员 )

作者头像
韩曙亮
发布于 2023-10-11 11:45:18
发布于 2023-10-11 11:45:18
56800
代码可运行
举报
运行总次数:0
代码可运行

一、访问私有成员

1、对象无法访问私有变量

在下面的 Python 类 Student 中 , 定义了私有的成员变量 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 定义私有成员
    __address = None

该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ;

在 类外部 创建的 Student 实例对象 , 是无法访问 __address 私有成员的 ;

使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AttributeError: 'Student' object has no attribute '__address'. Did you mean: 'address'?

最后一行代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(s1.__address)

访问 s1 实例对象 的 __address 成员 , 会报如下错误 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
面向对象 - 封装
"""


# 定义 Python 类
class Student:
    name = None
    age = None

    def say(self):
        print(f"{self.name} is {self.age} years old")

    # 定义私有成员
    __address = None

    # 定义私有成员方法
    def __say(self):
        print(f"地址是 {self.__address}")

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address


# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
print(s1.__address)

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Traceback (most recent call last):
  File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 31, in <module>
    print(s1.__address)
AttributeError: 'Student' object has no attribute '__address'. Did you mean: 'address'?
Tom
18

Process finished with exit code 1

2、对象无法访问私有方法

在类中 定义私有成员方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 定义私有成员方法
    def __say(self):
        print(f"地址是 {self.__address}")

创建对象 , 调用该私有成员方法 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建对象
s1 = Student("Tom", 18, "学院路6号")
s1.__say()

报如下错误 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AttributeError: 'Student' object has no attribute '__say'

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
面向对象 - 封装
"""


# 定义 Python 类
class Student:
    name = None
    age = None

    def say(self):
        print(f"{self.name} is {self.age} years old")

    # 定义私有成员
    __address = None

    # 定义私有成员方法
    def __say(self):
        print(f"地址是 {self.__address}")

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.address = address


# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
s1.__say()

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Tom
18
Traceback (most recent call last):
  File "Y:\002_WorkSpace\PycharmProjects\HelloPython\hello.py", line 31, in <module>
    s1.__say()
AttributeError: 'Student' object has no attribute '__say'

Process finished with exit code 1

3、类内部访问私有成员

在 Student 类中 , 定义了 私有成员变量 和 私有成员方法 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # 定义私有成员
    __address = None

    # 定义私有成员方法
    def __say(self):
        print(f"address is {self.__address}")

并且在 say 成员方法 中 , 调用了 上述 私有的 成员变量 和 成员方法 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def say(self):
        print(f"{self.name} is {self.age} years old , address is {self.__address}")
        self.__say()

最终的执行结果为 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Tom is 18 years old , address is 学院路6号
address is 学院路6

完整代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""
面向对象 - 封装
"""


# 定义 Python 类
class Student:
    name = None
    age = None

    def say(self):
        print(f"{self.name} is {self.age} years old , address is {self.__address}")
        self.__say()

    # 定义私有成员
    __address = None

    # 定义私有成员方法
    def __say(self):
        print(f"address is {self.__address}")

    def __init__(self, name, age, address):
        self.name = name
        self.age = age
        self.__address = address


# 创建对象
s1 = Student("Tom", 18, "学院路6号")
print(s1.name)
print(s1.age)
s1.say()

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Y:\002_WorkSpace\PycharmProjects\pythonProject\venv\Scripts\python.exe Y:/002_WorkSpace/PycharmProjects/HelloPython/hello.py
Tom
18
Tom is 18 years old , address is 学院路6号
address is 学院路6号

Process finished with exit code 0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、访问私有成员
    • 1、对象无法访问私有变量
    • 2、对象无法访问私有方法
    • 3、类内部访问私有成员
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档