• python隐藏类中的属性


    方法一:

      效果图一:

      代码一:

    # 定义一个矩形的类
    class Rectangle:
        # 定义初始化方法
        def __init__(self,width,height):
            self.hidden_width = width
            self.hidden_height = height
    
        # 定义获取width、height的方法
        def get_width(self):
            return self.hidden_width
    
        def get_height(self):
            return self.hidden_height
    
        # 定义修改width、height的方法
        def set_width(self,width):
            self.hidden_width = width
    
        def set_height(self,height):
            self.hidden_height = height
    
        # 定义一个获取矩形面积的方法
        def get_area(self):
            return self.hidden_width * self.hidden_height
    
    # 创建Rectangle的实例
    r_one = Rectangle(3,4)
    # 输出打印 r_one的widh
    print(r_one.get_width())   # 输出 3
    # 输出打印 r_one的area
    print(r_one.get_area())    # 输出 12
    
    # 改变width
    r_one.set_width(5)
    print(r_one.get_area())     # 输出 20

    方法二:

      效果图二:

      代码二:

    # 可以为对象的属性使用双下划线开头,__xxx
    # 双下划线开头的属性,是对象的隐藏属性,隐藏属性只能在类的内部访问,无法通过对象访问
    # 其实隐藏属性只不过是Python自动为属性改了一个名字
    #   实际上是将名字修改为了,_类名__属性名 比如 __name -> _Person__name
    class Person:
        def __init__(self,name):
            self.__name = name
    
        def get_name(self):
            return self.__name
    
        def set_name(self , name):
            self.__name = name        
    
    p = Person('孙悟空')
    
    # print(p.__name) # 报错:AttributeError: 'Person' object has no attribute '__name'
                      #__开头的属性是隐藏属性,无法通过对象访问
    p.__name = '猪八戒' # 这个设置无效,不会报错
    print(p._Person__name)
    p._Person__name = '沙和尚'
    
    print(p.get_name())

    方法三: 常用的

      效果图三:

     

      代码三:

    # 使用__开头的属性,实际上依然可以在外部访问,所以这种方式一般不用
    #   一般会将一些私有属性(不希望被外部访问的属性)以_开头
    #   一般情况下,使用_开头的属性都是私有属性,没有特殊需要不要修改私有属性
    class Person:
        def __init__(self,name):
            self._name = name
    
        def get_name(self):
            return self._name
    
        def set_name(self,name):
            self._name = name
    
    p = Person('牛一')
    
    print(p._name)
  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/FlyingLiao/p/11332388.html
Copyright © 2020-2023  润新知