私有属性和私有方法
原创...大约 2 分钟
Python 对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:
- 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。
- 类内部可以访问私有属性(方法)
- 类外部不能直接访问私有属性(方法)
- 类外部可以通过
_类名__私有属性(方法)名
”访问私有属性(方法)
注意
方法本质上也是属性!只不过是可以通过()执行而已。
所以,此处私有属性和私有方法的使用基本一致。
私有属性
class Employee:
count = 26 # 公有类属性
__company = "WEB" # 私有类属性
def __init__(self, name, age):
self.name = name # 公有实例属性
self.__age = age # 私有实例属性
def say_company(self):
print(f"我的公司是:{Employee.__company}") # 类内部可以直接访问私有类属性
print(f"{self.name}的年龄是:{self.__age}") # 类内部可以直接访问私有实例属性
p1 = Employee("小米", 32)
print(Employee.count) # 类外部直接访问公有类属性
print(p1.name) # 类外部直接访问公有实例属性
print(Employee._Employee__company) # 外部强行访问私有类属性
print(p1._Employee__age) # 外部强行访问私有实例属性
私有方法
class Employee:
count = 26
__company = "WEB"
def __init__(self, name, age):
self.name = name
self.__age = age
def __say_work(self): # 私有实例方法
print(f"我的公司是:{Employee.__company}")
print(f"{self.name}的年龄是:{self.__age}")
def say_company(self): # 公有实例方法
print(f"我的公司是:{Employee.__company}")
print(f"{self.name}的年龄是:{self.__age}")
self.__say_work() # 类内部直接调用私有实例方法
p1 = Employee("小米", 32)
p1.say_company() # 类外部直接访问公有实例方法
p1._Employee__say_work() # 外部强行访问私有实例方法
Powered by Waline v2.15.7