在下面的 Python 类 Student 中 , 定义了私有的成员变量 ,
# 定义私有成员
__address = None
该私有成员变量 , 只能在类内部进行访问 , 类的外部无法进行访问 ;
在 类外部 创建的 Student 实例对象 , 是无法访问 __address
私有成员的 ;
使用 实例对象 访问 类的私有成员 , 编译时不会报错 , 但是运行时会报错
AttributeError: 'Student' object has no attribute '__address'. Did you mean: 'address'?
最后一行代码
print(s1.__address)
访问 s1 实例对象 的 __address
成员 , 会报如下错误 ;
代码示例 :
"""
面向对象 - 封装
"""
# 定义 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)
执行结果 :
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
在类中 定义私有成员方法
# 定义私有成员方法
def __say(self):
print(f"地址是 {self.__address}")
创建对象 , 调用该私有成员方法 ,
# 创建对象
s1 = Student("Tom", 18, "学院路6号")
s1.__say()
报如下错误 :
AttributeError: 'Student' object has no attribute '__say'
代码示例 :
"""
面向对象 - 封装
"""
# 定义 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()
执行结果 :
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
在 Student 类中 , 定义了 私有成员变量 和 私有成员方法 :
# 定义私有成员
__address = None
# 定义私有成员方法
def __say(self):
print(f"address is {self.__address}")
并且在 say 成员方法 中 , 调用了 上述 私有的 成员变量 和 成员方法 :
def say(self):
print(f"{self.name} is {self.age} years old , address is {self.__address}")
self.__say()
最终的执行结果为 :
Tom is 18 years old , address is 学院路6号
address is 学院路6号
完整代码示例 :
"""
面向对象 - 封装
"""
# 定义 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()
执行结果 :
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有