Python面向对象之私有方法(4)

类里面有很多成员修饰符,用来修饰各种属性

(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)#引用内部方法的特殊语法

  这样就可以访问私有属性了,但这种方法不建议

原文地址:https://www.cnblogs.com/xiaobeibei26/p/6438020.html