Class Test(object):
def __init__(self):
self.__num = 10
t =Test(100)
print(t,__num)
外部打印不了
Class Test(object):
def __init__(self):
self.__num = 10
def setNum(self,newNum):
self.__num = newNum
def getNum(self):
return self.__num
t =Test()
#print(t,__num)
print(t.getNum())
t.setNum(50)
print(t.getNum())注意1:子类继承不了父类中__XXX的类,只能调用其他非私有方法间接使用,如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
"""XX:共有变量,随意用
-Xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问(通过import XX.可以使用 XX._x)
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到,通过di()可以查看 _类的名字_XX))
xx_:单后置下划线,用于避免与Python关键词的冲突
属性 proprety
Class Test(object):
def __init__(self):
self.__num = 10
def setNum(self,newNum):
self.__num = newNum
def getNum(self):
return self.__num
num = proprety(getNum,setNum)
t =Test()
#print(t,__num)
print(t.getNum())
#t.setNum(50)
#print(t.getNum())
t.num =50
print(t.num)
用proprety进行升级,相当于把方法封装,开发者对属性进行设置时更方便
另外一种方式,同样可以得到这个效果,使用装饰器
Class Test(object):
def __init__(self):
self.__num = 10
@num.setter
def num(self,newNum):
self.__num = newNum
@proprety
def num(self):
return self.__num
t =Test()
#print(t,__num)
print(t.getNum())
#t.setNum(50)
#print(t.getNum())
t.num =50
print(t.num)