"""
在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头。
如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字.
"""
class A(object): def __init__(self): # 私有 在变量名称前加上‘_ _’ # 私有 不可继承,不可在外部调用 # 但是可以在内部调用 self.__a = 1000 # 约定使用“_”来表示私有 self._b = 100 def B(self): print(self.__a) self.__c() def __c(self): print(self.__a) A_ = A( ) print(A_._A__a) print(A_.B()) print(dir(A_)) # 查看该实例所有的方法和属性
@property装饰器
之前我们讨论过Python中属性和方法访问权限的问题,我们不建议将属性设置为私有的,而是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作,这是就考虑使用@property包装器来包装getter和setter方法。
使用装饰器的时候,需要注意:
1.装饰器名、函数名需一致
2.property需要先声明,再写setter,顺序不能倒过来
3.如果某个变量只允许被访问不允许被修改,就可以使用访问器@property
4.如果需要修改访问器中的变量,可以搭建一个修改器,或者删除访问器
例子:
# 输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
class A(object): def __init__(self,a,b,c): self.__a=a self.__b=b self.__c=c @property def B(self): print(self.__a) @B.setter def B(self,num): self.__a=num def sum(self): print(self.__a+self.__b+self.