python 公有属性和私有属性
十三、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")
------------------------------------------------------------
怎么真正来操作(读写删除)属性呢?要直接访问属性就违背面向对象封装原则
相关文章