公有权限
直接定义的方法和属性就是公有的,可以在任何地方访问和使用,只要创建对象就可以访问和使用
私有权限
- 只能在类内部定义
- 需要在方法或者属性前面加__,这个方法或属性就变为私有,例:__add
- 私有方法或属性只能在当前类内部使用,不能在类外部或者子类当中直接使用
如果我们需要在外部修改私有属性,那应该怎么做呢?
我们可以通过在类内部定义一个方法,这个方法可以对某私有属性进行修改,例:
定义一个Person类,把name属性定义为公有,age属性定义为私有
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age
def __str__(self):
return f"{self.name},{self.__age}"
if __name__ == '__main__':
person=Person("张三",18)
print(person)
输出结果
此时我们在类外部去修改age,是无法修改成功的
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age
def __str__(self):
return f"{self.name},{self.__age}"
if __name__ == '__main__':
person=Person("张三",18)
print(person)
person.__age=1000
print(person)
我们要注意的是,此时的person.__age=1000的意思是,我们又给person添加了一个属性__age
,并给__age属性赋值1000,而不是将类内部的__age属性值修改为1000
输出结果:
我们可以在类的内部定义一个set_age的函数,用于在类外部对age属性进行修改
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age
def __str__(self):
return f"{self.name},{self.__age}"
def set_age(self,age):
self.__age=age
if __name__ == '__main__':
person=Person("张三",18)
print(person)
# person.__age=1000
# print(person)
person.set_age(1000)
print(person)
输出结果:
修改成功