文章目录
- 一、访问私有成员
- 1、对象无法访问私有变量
- 2、对象无法访问私有方法
- 3、类内部访问私有成员
一、访问私有成员
1、对象无法访问私有变量
在下面的 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 = Noneage = Nonedef 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 = nameself.age = ageself.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
18Process finished with exit code 1
2、对象无法访问私有方法
在类中 定义私有成员方法
# 定义私有成员方法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 = Noneage = Nonedef 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 = nameself.age = ageself.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
3、类内部访问私有成员
在 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 = Noneage = Nonedef 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 = nameself.age = ageself.__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