码迷,mamicode.com
首页 > 其他好文 > 详细

类的私有变量和私有方法

时间:2020-02-03 10:22:59      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:def   通过   黄色   结果   私有方法   派生类   __init__   外部   super   

类的私有变量和私有方法

  • 格式:双下划线+变量名/方法名,变量分为静态变量和动态变量

  • 私有变量和方法只能在本类中的方法内调用,不能在类以外调用

  • 私有变量和方法也不能通过类来继承,不能通过子类调用

  • 如果希望通过对象直接调用私有变量和方法,可以使用**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
    '''

类的私有变量和私有方法

标签:def   通过   黄色   结果   私有方法   派生类   __init__   外部   super   

原文地址:https://www.cnblogs.com/ddzc/p/12254588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!