1. 私有属性/方法/静态属性 -> 只有在类的内部才能使用
- 私有化的作用就是一些属性/方法/静态属性只想在内部使用,不想在外不可以被使用到,例如:密码 密钥
- 私有属性 -> __属性名
class Person:
def __init__(self, name, password):
self.name = name
self.__password = password # 定义私有属性
def p_fn(self):
print(self.__password) # 在类的内部调用私有属性
p = Person('Kevin', 123)
p.p_fn()
# print(p.password) 在外部无法调用私有属性
- 私有方法 -> __方法名
class Person:
def __init__(self, name, password):
self.name = name
self.__password = password
def __private_fn(self): # 定义私有方法
print(self.__password)
def p_fn(self):
self.__private_fn() # 在类的内部调用私有方法
p = Person('Kevin', 123)
p.p_fn()
- 私有静态属性 -> __私有静态属性名
class Person:
__key = '密钥' # 定义私有静态属性
def __init__(self, name, password):
self.name = name
self.__password = password
def p_fn(self):
print(Person.__key) # 调用私有静态属性
p = Person('Kevin', 123)
p.p_fn()
2. _类名__私有属性名/方法名/静态属性名 -> 在外部调用私有属性/方法/静态属性 -> 在开发的过程中不要这么做
class Person:
__key = '密钥'
def __init__(self, name, password):
self.name = name
self.__password = password
def __private_fn(self):
print(self.__password)
def p_fn(self):
self.__private_fn()
p = Person('Kevin', 123)
print(p.__dict__) # {'name': 'Kevin', '_Person__password': 123}
print(p._Person__password) # 在外部获取私有属性
p._Person__private_fn() # 在外部调用私有方法
print(p._Person__key) # 在外部调用私有静态属性
3. 在子类无法调用父类的私有属性 -> 保护父类属性不被子类调用
class Father:
def __int__(self):
self.__attr = '父级的私有属性'
class Child(Father):
def fn(self):
print(self.__attr) # 无法调用父级的私有属性
c = Child()
c.fn()
4. 在 C++ 中的类所有属性都会定义为私有属性,属性的获取和修改都通过方法实现,且可以在修改属性的方法中加上限制,有效实现属性不会被随意修改
class Room:
def __init__(self, name, length, width):
self.__name = name
self.__length = length
self.__width = width
def getName(self):
return self.__name
def editName(self, new_name):
if type(new_name) is str and new_name.isdigit() == False: # 判断是否为字符串,且字符串不是由数字组成的
self.__name = new_name
else:
print('不合法姓名')
def area(self): # 计算面积且长宽不暴露出去
return self.__length * self.__width
r = Room('Kevin', 100, 20)
print(r.area()) # 2000
print(r.getName()) # Kevin
r.editName('Yeung')
print(r.getName()) # Yeung