• Python 私有属性和私有方法


    类的私有属性和方法

    Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有。

    Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在类的内部使用的属性或方法,表现形式为以“__“ 属性名或方法名以双下划线开头。

    class Test(object):
        __count = 0   # 私有属性 __count
    
        def get_count(self):
            return self.__count   # 类的内部可以使用私有属性
    
        def set_count(self, value):
            if self.__check_value(value):   # 在类的内部调用类的私有方法
                self.__class__.__count = value
    
        def __check_value(self, value):   # 定义类的私有方法 检查参数
            if isinstance(value, int):
                return True
    
    
    a = Test()
    print(a.get_count())
    a.set_count(100)
    print(a.get_count())
    #a.__check_value(10)    # 调用私有方法会报错
    #print(a.__count)			# 直接访问私有属性也会报错
    
    

    应用场景

    对于一些敏感的数据,我们不希望直接被的函数调用,或者不希望草率的直接 object.key = value 来修改,我们可以选择将属性声名为私有的,这样从外部时无法访问该属性的,也就不能修改了,但是依然可以修改属性字典的方法来修改。

    # 当然 可以使用 @proprety 
    class Person(object):
        __name = 'Monkey'
    
        def update_name(self, name):
            self.__name = name
    
        def get_name(self):
            return self.__name
    
    
    p = Person()
    p.update_name('BlackMonkey')
    print(p.get_name())   # BlackMonkey
    print(p.__name)   # 报错 AttributeError: 'Person' object has no attribute '__name'
    
  • 相关阅读:
    插入排序
    选择排序
    二分法查找
    pickle模块的使用
    循环和递归求阶乘、递归实现汉诺塔程序、递归实现拆出每个位的数字放在列表中、递归求第五个人的年龄
    app测试和测试基础
    TCP协议中的三次握手和四次挥手及其他
    AcWing 122 糖果传递
    AcWing 121 赶牛入圈 (二分+离散化)
    AcWing 120 防线 (二分)
  • 原文地址:https://www.cnblogs.com/monkey-code/p/13160629.html
Copyright © 2020-2023  润新知