几个概念:
- 名字重整:
比如有一个Test类,定义了私有属性__name,并实例化了对象a,无法调用该属性。
我们可以看到__name属性的名字被变成_Test__name,这就是名字重整。
- 魔法属性/方法:
魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。
私有化
class Test(object):
def __init__(self,name):
#私有的属性
self.__name=name
#私有方法
def __fun(self):
pass
test=Test('11')
#__dict__可以检查一个对象的所有属性
print(test.__dict__) #{'_Test__name': '11'}
get和set方法:
- 第一种:
class Test(object):
def __init__(self,name):
#私有的属性
self.__name=name
def getName(self):
return self.__name
def setName(self,name):
self.__name=name
test=Test('11')
print(test.getName())
test.setName('22')
- 第二种:
class Test(object):
def __init__(self,name):
#私有的属性
self.__name=name
def getName(self):
return self.__name
def setName(self,name):
self.__name=name
name=property(getName,setName)
test=Test('11')
test.name='22'
print(test.name)
- 第三种:get和set方法的名字必须与属性不加下划线的保持一致
class Test(object):
def __init__(self,name):
#私有的属性
self.__name=name
@property
def name(self): #get
return self.__name
@name.setter
def name(self,name): #set
self.__name=name
test=Test('11')
test.name='22'
print(test.name)