1.类变量 :不用实例化对象,通过类名即可访问,值可以修改
2.实例变量:必须要实例化对象才能访问到
3.单划线变量: _name 代表是protect变量,原则不允许外部直接访问,但是也能访问到
4.双划线变量:__name 代表是private变量,仅允许这个类访问,子类也不能访问,如果非得要在类外访问,其对象名会变成_类名__变量名访问,可以通过类对象._类名__变量名访问
class VarTest:
classVar = "classVar"
__privateVar= "__privateVar"
_proectvar = "_proectvar"
def __init__(self,value=3):
self.objectVar = value
self.__objectprivate = "__objectprivate"
self._proectvars = "_proectvars"
def getvar(self):
print("在类方法中类变量",VarTest.classVar)
print("在类方法中访问实例变量",self.objectVar)
print("在类方法中访问类的私有变量",self.__objectprivate)
print("在类方法中访问类的保护变量",self._proectvars)
class Subclass(VarTest):
def getsubvar(self):
print("在子类方法中访问父类的类变量",VarTest.classVar)
print("在子类方法中访问父类的实例变量",self.objectVar)
# print("在子类方法中访问父类的私有变量",self.__objectprivate)#访问不到
print("在子类方法中访问父类的保护变量",self._proectvars)
if __name__ == '__main__':
print("类外直接访问类变量",VarTest.classVar)
print("类外直接访问类的保护变量",VarTest._proectvar)
# print("类外直接访问类的保护变量", VarTest.__privateVar)#访问不到
# VarTest.varA
test =VarTest()
print("通过类的实例对象访问类的私有变量", test._VarTest__privateVar)
print("通过类的实例对象访问实例变量", test.objectVar)
print("通过类的实例对象访问被保护的实例变量", test._proectvars)
'''
返回结果如下:
类外直接访问类变量 classVar
类外直接访问类的保护变量 _proectvar
通过类的实例对象访问类的私有变量 __privateVar
通过类的实例对象访问实例变量 3
通过类的实例对象访问被保护的实例变量 _proectvars
'''
if __name__ == '__main__':
test = VarTest()
test.getvar()
'''
返回结果如下:
在类方法中类变量 classVar
在类方法中访问实例变量 3
在类方法中访问类的私有变量 __objectprivate
在类方法中访问类的保护变量 _proectvars
'''
sub = Subclass()
sub.getsubvar()
'''
返回结果如下:
在子类方法中访问父类的类变量 classVar
在子类方法中访问父类的实例变量 3
在子类方法中访问父类的保护变量 _proectvars
'''