类里面有很多成员修饰符,用来修饰各种属性
(1)私有属性,只有内部的方法可以访问
class Foo: xo = 'xo'#表明是公共的,内部外部都可以访问 __ox = '私有属性'#私有属性,只有内部方法可以访问 def __init__(self):
self.__name = 'Jay'#私有属性,只有内部方法可以访问
def fetch(self,bk):
print(bk) print(Foo.__ox)#里面也可以写self.__ox
#print(Foo.__xo)#前面加了两个下划线,是私有属性,这样调用会报错,只有内部的方法可以访问
obj=Foo()
obj.fetch('bb')
结果如图,
如果子类继承了父类Foo,在子类的方法里面调用了父类的私有属性,也是访问不了的,会报错
如果在方法前面加了两个下划线也是不能被实例访问的,只能间接访问
class Foo: xo = 'xo'#表明是公共的,内部外部都可以访问 __ox = '私有属性'#私有属性,只有内部方法可以访问 def __init__(self): self.__name = 'Jay'#私有属性,只有内部方法可以访问 def __fetch(self,bk):#私有方法 print(bk) print(Foo.__ox)#里面也可以写self.__ox def fetch(self): self.__fetch('bob') obj= Foo() #print(obj.__fetch)这样会报错,这是私有方法 obj.fetch()
结果如图
私有属性也有一种特殊方法在外面访问
class Foo: xo = 'xo'#表明是公共的,内部外部都可以访问 __ox = '私有属性'#私有属性,只有内部方法可以访问 def __init__(self): self.__name = 'Jay'#私有属性,默认只有内部方法可以访问 def __fetch(self,bk):#私有方法 print(bk) print(self.__ox)#里面也可以写self.__ox def fetch(self): self.__fetch('bob') obj= Foo() print(obj._Foo__name)#引用内部方法的特殊语法
这样就可以访问私有属性了,但这种方法不建议