面向对象-属性-类属性,私有化属性,受保护属性的访问区别。
'''
私有化属性:为了部分属性的安全,给类属性设定一个限制,让此属性只能在类的内部进行访问,实例化的对象无法访问
私有化属性本质就是把之前访问权限从一个较大的范围给压缩到一个指定的范围
一般的公有类属性访问可以通过:类中的方法访问,对象访问,类直接方位
私有属性可以通过:只能在类的内部访问
'''
# 注意:python语言中没有真正意义上的私有属性,但是可以通过下划线完成一种伪私有效果
# 类属性和方法以及实力属性和方法都遵循同样的规则
# x _y __z
class Person:
name = 'Tom' # 公有属性
_age = 18 # 受保护属性
__sex = '男' # 私有属性
def func(self):
print(Person.name)
print(self.name)
print(Person._age)
print(self._age)
print(Person.__sex)
print(self.__sex)
# 在类的内部访问公有属性,私有属性和受保护属性都行
p = Person()
p.func()
print('*' * 50)
print(Person.name)
print(p.name)
print(Person._age) # 强行访问受保护属性的时候会有黄色波浪线来警告
print(p._age)
# print(Person.__sex) # AttributeError: type object 'Person' has no attribute '__sex'
# print(p.__sex) # AttributeError: 'Person' object has no attribute '__sex'
# 从类的外部通过类和对象只能访问公有属性和受保护属性
'''
总结:
公有属性:通过类的内部,对象调用,子类调用,模块之间的调用都能访问
受保护的属性:通过类的内部可以访问,对象调用,子类调用,模块调用也能强行访问,但是有黄色波浪线警告提示
私有属性:一般只能在类的内部访问,
'''
# ----以下有待思考----
# 模块之间调用使用import XXX的时候不能访问,
# 使用form XXX import * 的时候加上__all__ = []才能访问,但是这里和受保护属性一样
# 思考:import XXX 和 form XXX import * 有什么不同