私有方法和私有属性的访问
通过类内部方法访问私有方法
# 类内方法 访问类和实例的私有方法 class test(object): def __init__(self): self.num = 10 self._num = 20 self.__num = 30 # 类内方法访问实例私有变量 def __secret(self): # 内部的方法是可以访问得到私有属性的 print(f'内部可以访问私有属性self.__num:{self.__num}') def fun(self): self.__secret() t = test() t.fun()
通过类内部方法访问私有属性
# 类内方法 访问类和实例的私有属性 class test(object): __old = "无法在外部访问" _old = "类对象和子类可以访问" old = "类变量,外部可访问。" def __init__(self): self.num = 10 self._num = 20 self.__num = 30 # 类内方法访问实例私有变量 def secret(self): # 内部的方法是可以访问得到私有属性的 print(f'内部可以访问私有属性self.__num:{self.__num}') # 类内方法访问 类私有变量 def secret1(self): # 内部的方法是可以访问得到私有属性的 print(f"通过类名访问类变量test.__old:{test.__old}") print(f"通过传入的对象名访问类变量self.__old:{self.__old}") # 传入对象时,没有找到实例属性,则继续找类属性 t = test() t.secret() # 内部方法可以访问私有变量 test.secret1(test) test.secret1(t) # print(t.__num) # AttributeError: 'test' object has no attribute '__num'
通过类和实例访问私有属性和方法
# 私有属性和方法 ''' 总结:双下滑线私有属性和方法只能在类内部访问,外部不能访问; 单下划线私有属性和方法,类和子类能访问,是里不能访问 ''' class test(object): __old = "无法在外部访问" _old = "类对象和子类可以访问" old = "类变量,外部可访问。" def __init__(self): self.num = 10 self._num = 20 self.__num = 30 def secret(self): # 内部的方法是可以访问得到私有属性的 print(f'内部可以访问私有属性self.__num:{self.__num}') def __hello(): # 外部不能访问 print('该方法外部访问不到') print("内部调用私有变量__old:", test.old) def _hi(): # 类对象可以访问 print('该私有方法类和子类可以访问,实例不能访问。',end="") print("内部调用私有变量__old:",test.old) t = test() # 通过类对象访问 方法 test._hi() # 类对象能访问单下划线私有方法 # t._hi() # 实例对象不能访问单下划线私有方法 # 通过实例对象访问 实例变量 print(t.num) # 10 print(t._num) # 20 t.secret() # print(t.__num) # AttributeError: 'test' object has no attribute '__num' # 通过实例对象访问 类变量 print(t._old) # print(t.old) # # 通过类对象访 类变量 print(test._old) # "类对象和子类可以访问" print(test.old) # "类变量 外部可访问" # print(test.__old) #AttributeError type object 'test' has no attribute '__old'