python 公有属性和私有属性

发布时间:2019-08-08 07:46:36编辑:auto阅读(1718)

    十三、python 公有属性和私有属性

    属性

    方法:

    class Chinese(Person):

    nation = 'China'

    def __init__(self,name):

    self.__name = name

    def msg(self):

    print self.name

    属性:

    -类属性

    -实例属性

    属性的可见性:

    -公有属性

    -私有属性

    class Chinese(Person):

    nation = 'China'  #类属性

    def __init__(self,id,name):

    self.id = id #公有属性

    self.__name = name #实例属性,私有属性

    def msg(self):

    print self.name

    私有属性:

    python并没有真正的私有属性

    __定义的属性,只是被改名换姓而已

    _定义的属性,意义在于唤起用户的注意,看成私有属性

     

    ------------------------------------------------------------------

    class Chinese(object):

        nation = 'Chain'

     

        def __init__(self, id, name):

            self._id = id

            self.__name = name

     

        def sayHi(self, msg):

            print self.__name,msg

     

     #定义实例

    aidon = Chinese(1,'aidong')

    bajie = Chinese(2,'bajie')

    #通过类看类属性

    Chinese.nation

    #通过实例看类属性

    aidon.nation

     

    #通过类修改类属性

    Chinese.nation=u'中国'

    #再次查看

    Chinese.nation

    aidon.nation

    bajie.nation

     

    #通过实例修改类属性(只对该实例管用):尽量不用实例对象修改类属性

    aidon.nation='Chain'

     

    #查看实例字典

    aidon.__dict__

     

    #修改实例属性(_)的值(_id感觉是点没有被保护,底层也没有改名换姓)

    aidon._id

    aidon._id = 100  #是否能修改该实例对象的私有属性值(可以)

    aidon._id

     

    #修改实例属性(__)的值(__name感觉是点被保护,底层其实是改名换姓)

    bajie.__name

    bajie.__name = "tangzeng" #该方式修改是不对的 (相当于是新增咯)

    bajie._Chinese__name = 'wukong'  #这样才可以,我们定义实例属性是__name,但是压根被python改咯个名字,规律是:_classname__propertyname

     

    #调用方法:

    aidon.sayHi("hello aidon")

     

    ------------------------------------------------------------

    怎么真正来操作(读写删除)属性呢?要直接访问属性就违背面向对象封装原则

关键字

上一篇: python实现抠图

下一篇: Python3.5 写入excel