zoukankan      html  css  js  c++  java
  • python基础===类的私有属性(伪私有)

    说在前面的一点:

     

    python明明有私有的定义方法就是在变量或者方法的面前加上双下滑线__,这个实际上是python的伪私有。只是一种程序员约定俗称的规定,加了就表示私有变量,但是你如果要在外部调用的话,还是可以调用的。

     

    Python并没有真正的私有化支持,但可用下划线得到伪私有


       (1)_xxx      "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入


       (2)__xxx    类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。


       (3)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__() 代表类的构造函数。

     

    class B:
        def __init__(self):
            self.__private = 0
            self._private=1
        def __private_method(self):
            pass
        def public_method(self):
            pass
            self.__private_method()
        
    
    b = B()
    #print(b.__private)  #双下划线,访问不到数据
    print(b._private)       #单下划线,可以访问到

     

    还有注意的一点是,并不是说私有属性就不能被访问到,比如

     

    class B:
        def __init__(self):
            self.__private1 = 100
            self._private2=99
        def __private_method(self):
            pass
        def public_method(self):
            pass
            self.__private_method()
    
    b = B()
    #print(b.__private1)  #双下划线,访问不到数据
    print(b._private2)       #单下划线,可以访问到
    print(b._B__private1

    私有变量:实例._类名__变量名
    私有方法:实例._类名__方法名()

     

    所以说这只是一种伪私有,只是一种程序员约定俗称的规定。

    上面提到有两种不同的编码约定(单下划线和双下划线) 来命名私有属性,那么问题就来了:到底哪种方式好呢?大多数而言,应该让你的非公共名称以单下划线开头。但是,如果你清楚代码会涉及到子类,并且有些内部属性应该在子类中隐藏起来,那么才考虑使用双下划线方案。

  • 相关阅读:
    Redis缓存穿透,缓存击穿,缓存雪崩
    Redis持久化机制
    Docker小白到实战之常用命令演示,通俗易懂
    分布式事务最终一致性-CAP框架轻松搞定
    gRPC四种模式、认证和授权实战演示,必赞~~~
    Docker小白到实战之开篇概述
    郑州 | 7月20日,想想都后怕
    避不开的分布式事务
    c++实现十大经典排序算法
    浏览器缓存机制总结
  • 原文地址:https://www.cnblogs.com/botoo/p/8820614.html
Copyright © 2011-2022 走看看