public protected 和 private
class T(object):
def __init__(self):
self.name = "John" # public 类的内部和外部都可以访问, 会被子类继承
self._age = 18 # protected 类的内部和外部都可以访问,会被子类继承
self.__id = 123 # private 只能在类的内部访问,并且不被子类继承
t = T()
print(t.name)
print(t._age)
print(t.__id)
# John
# 18
# AttributeError: 'T' object has no attribute '__id'
print(t._T__id) # 这种方式可以获得 private 字段内容
# Python 不会保证private的私密性
# 123
protected
protected 字段,提醒本类以外的使用这种字段的时候要小心。
private
能用 protected 字段就避免用 private 字段,只有一种情况除外
当子类不受自己控制时,用protected 字段,可能被子类的 protected 字段覆盖
class T(object):
def __init__(self):
self._value = 't'
def get_value(self):
return self._value
class TT(T):
def __init__(self):
super().__init__()
self._value = "tt"
tt = TT()
print(tt.get_value())
# tt
用 private 字段解决
class T(object):
def __init__(self):
self.__value = 't'
def get_value(self):
return self.__value
class TT(T):
def __init__(self):
super().__init__()
self._value = "tt"
tt = TT()
print(tt.get_value())
# t