Python基础-python中的私有化(13)

几个概念:

  • 名字重整:

比如有一个Test类,定义了私有属性__name,并实例化了对象a,无法调用该属性。
我们可以看到__name属性的名字被变成_Test__name,这就是名字重整。

  • 魔法属性/方法:

魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。

私有化

批注 2020-05-04 191319.png
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)

你可能感兴趣的:(Python基础-python中的私有化(13))