类的私有变量和私有方法
Posted ddzc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的私有变量和私有方法相关的知识,希望对你有一定的参考价值。
类的私有变量和私有方法
格式:双下划线+变量名/方法名,变量分为静态变量和动态变量
私有变量和方法只能在本类中的方法内调用,不能在类以外调用
私有变量和方法也不能通过类来继承,不能通过子类调用
如果希望通过对象直接调用私有变量和方法,可以使用**obj._类名__变量名/方法名**来调用,但是这种方法是python3的一个bug,工作中不能使用。
class Person(object): skin_color = '黄色' __num = 'one' # __变量名表示的是私有的静态字段 def __init__(self, name, age, gender): self.name = name self.age = age self.__gender = gender def func(self): print(self.__num) print(Person.__num) # 类名也可以直接调用私有静态字段 def __func(self): print("这是一个私有方法") def func1(self): self.__func() # 在本类内部中的其他方法里可以调用私有方法 # 在本类中调用的时候用self.静态变量/方法来调用 def func2(self): print(self.__gender) p1 = Person('王慧', 20, '女') print(p1.skin_color) # print(p1.__num) # 实例化对象不能调用私有静态字段 # print(Person.__num) # 类名也不能调用私有静态字段 p1.func() # 类的内部可以正常调用私有静态字段 class Son(Person): def __init__(self, name, age, gender, hobby): super().__init__(name, age, gender) self.hobby = hobby def func5(self): # print(self.__gender) print(self.name) # 子类中不能调用父类中的私有动态变量 s1 = Son('理智', 20, '女', '篮球') print(s1.skin_color) # print(s1.__num) # 子类、派生类均不可调用父类的私有静态字段 # 总结:私有静态变量只能在本类内调用,不能在本类外或者子类、派生类中调用 # p1.__func() # 私有方法不能在外部调用 p1.func1() # 只能在本类中其他的方法里使用 s1.func1() # 类的派生和子类也不能调用私有的方法 p1.func2() s1.func5() p1._Person__func() # 通过对象直接调用私有方法或者私有变量,需要使用obj._类名__私有方法/变量,但这种方法在工作中不能使用 # 这是python的一个bug class Parent(object): def __func(self): print("in parent func") def __init__(self): self.__func() class Son(Parent): def __func(self): print("in Son func") son1 = Son() class Parent(object): def func(self): print("in parent func") def __init__(self): self.8func() class Son(Parent): def func(self): print("in Son func") son1 = Son() ''' 结果是: 黄色 one one 黄色 这是一个私有方法 这是一个私有方法 女 理智 这是一个私有方法 in parent func in Son func '''
以上是关于类的私有变量和私有方法的主要内容,如果未能解决你的问题,请参考以下文章
子类可以继承父类的一切方法,成员变量,甚至是私有的,但是却不能够访问这些私有的成员变量和方法
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段