含义:修改类属性都是直接通过类名修改的。 如果有些重要属性不想让别人随便修改, 或者防止意外修改,该如何处理? 意义:为了更好的保存属性安全, 即不能随意修改,将属性定义为私有属性 ,添加一个可调用的方法去访问。 注意:Python并没有真正的私有化支持, 但是可以通过下划线完成私有的效果, 类属性(方法)和实例属性(方法)遵循相同的规则添加不同下划线的结果:
x 共有属性 ----不添加任何东西
类内部访问 子类内部访问 模块其他位置访问 类访问---->父类,派生类 实例访问----->父类派生类,派生类实例 跨模块访问 import形式导入 from模块import*形式导入
class Animal:
x = 10
def test(self):
print(Animal.x)
print(self.x )
pass
class Dog(Animal):
def test2(self):
print(Dog.x)
print(self.x)
pass
a = Animal()
d = Dog()
print(Animal.x)
print(Dog.x)
print(a.x)
print(d.x)
#10 都可以访问
#10
#10
#10
_y 受保护属性
类内部访问 子类内部访问 模块其他位置访问 跨模块位置访问
class Anumal:
_y = 10
def test(self):
print(Animal._y)
print(self._y)
pass
class Dog(Animal):
def test2(self):
print(Dog._y)
print(self._y)
pass
a = Animal()
d = Dog()
print(Animal._y)
print(Dog._y)
print(a._y)
print(d._y)
__x
class Anumal:
__x = 10
def test(self):
print(Animal.__x)
print(self.__x)
pass
class Dog(Animal):
def test2(self):
print(Dog.__x)
print(self.__x)
pass
a = Animal()
d = Dog()
#d.test2() 会报错
print(Animal.__x) #报错,不能通过类名访问此处的私有属性
print(Dog.__x)
print(a.__x)
print(d.__x)
名字重整机制
使用私有属性的场景
数据保护 1、把特定的一个属性隐藏起来,不想让外部直接进行调用。 2、想保护这个属性,不想让属性的值随意改变 3、保护这个属性,不想让派生类【子类】去继承。
小结:
1、私有化的【实例】属性, 不能在外部直接的访问,可以在类的内部随意的使用 2、子类不能继承父类的私有化属性【只能继承父类公共的属性和行为】 3、在属性名的前面直接加__就可以变为私有化了。 特性: 1、私有化属性在类外部不可以访问、修改 2、私有化属性在类的内部访问、修改 3、子类不能继承私有化属性暑期编程PK赛 得CSDN机械键盘等精美礼品!



