封装的实现:隐藏
- 保护属性:_属性名
- 私有属性:__属性名
- 被视为_类名_属性名
class Account: #普通属性 bank = "BOC" #内部属性(保护属性) _username = "Hogwarts"#在类内进行使用,不在类外使用 #私有属性 __password = "888" # 通过类名访问类属性 print(Account.bank) #将会打印BOC print(Account._username) #将会打印 Hogwarts print(Account.__password) #将会引发 AttributeError Traceback (most recent call last): File "E:\pythonProject1\study.py", line 11, in <module> print(Account.__password) #将会引发 AttributeError ^^^^^^^^^^^^^^^^^^ AttributeError: type object 'Account' has no attribute '__password'
- 被视为_类名_属性名
封装的实现:暴露
- 提供数据访问功能(getter)
- 计算属性
- 语法:使用property装饰器
- 调用:实例.方法名
class Account:
————password = 888
@property #如此就可以获取本无法获取的属性值
def password(self):
return self.__password
- 提供数据操作功能(setter)
- 使用@计算属性名.setter装饰器
- 调用:实例化.方法名
class Account:
#普通属性
bank = "BOC"
#内部属性(保护属性)
_username = "Hogwarts"#在类内进行使用,不在类外使用
#私有属性
__password = "888"
@property
def password(self):
return self.__password
@password.setter
def password(self,value):
if len(value) >= 8:
self.__password = value
print('输入密码符合大于8位')
else:
print('输入密码位数不符合规定')
obj = Account()
obj.password = 'hogwart666'
print(obj.password)