文章目录
- 一、访问私有成员
- 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 = 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
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 = 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
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 = 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