• 格式:双下划线+变量名/方法名,变量分为静态变量和动态变量
  • 私有变量和方法只能在本类中的方法内调用,不能在类以外调用
  • 私有变量和方法也不能通过类来继承,不能通过子类调用
  • 如果希望通过对象直接调用私有变量和方法,可以使用obj.类名变量名/方法名来调用,但是这种方法是python3的一个bug,工作中不能使用。 ```python class Person(object): skin_color = ‘黄色’ __num = ‘one’

    __变量名表示的是私有的静态字段

    def init(self, name, age, gender):

    1. self.name = name
    2. self.age = age
    3. self.__gender = gender

    def func(self):

    1. print(self.__num)
    2. print(Person.__num)
    3. # 类名也可以直接调用私有静态字段

    def __func(self):

    1. print("这是一个私有方法")

    def func1(self):

    1. self.__func()
    2. # 在本类内部中的其他方法里可以调用私有方法
    3. # 在本类中调用的时候用self.静态变量/方法来调用

    def func2(self):

    1. 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

  1. def func5(self):
  2. # print(self.__gender)
  3. print(self.name)
  4. # 子类中不能调用父类中的私有动态变量

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”)

  1. def __init__(self):
  2. self.__func()

class Son(Parent): def __func(self): print(“in Son func”)

son1 = Son()

class Parent(object): def func(self): print(“in parent func”)

  1. def __init__(self):
  2. self.8func()

class Son(Parent): def func(self): print(“in Son func”)

son1 = Son()

‘’’ 结果是: 黄色 one one 黄色 这是一个私有方法 这是一个私有方法 女 理智 这是一个私有方法 in parent func in Son func ‘’’ ```