私有变量
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
p = Person('Mike', 30)
外部代码还是可以自由地修改一个实例name, age
p.name = 'John'
这时候变成John,而不是Mike了
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头, 就变成了一个私有变量(private),只有内部可以访问,外部不能访问
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
p = Person('Mike', 30)
p.__name = 'John' #报错 AttributeError: 'Person' object has no attribute '__name'
如果要获取或者修改对象的属性怎么办?用get_或者set_方法
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_name(self):
return self.__name
def set_name(self, value):
self.__name = value
p = Person('Mike', 30)
p.get_name()
p.set_name('John')
p.get_name()
在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量, 特殊变量是可以直接访问的,不是private变量,所以,不能用__name__这样的变量名 以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的 但是,应该把它视为私有变量,不要随意访问