zoukankan      html  css  js  c++  java
  • python 以下划线开头的变量和函数

    变量名的分类:

    以数字字母开头:正常的公有变量,如:a=1, def a()

    以单下划线开头:半私有,如:_b = 2, def _bb()

    以双下划线开头:私有,如:__c = 3, def __cc()

    以双下划线开头双下划线结尾:内置属性名或魔法方法名(系统定义的名字),如:__name__, __dir__

    公有

    任何人都可以使用

    半私有

    1. 类外

    类外的半私有对象、私有对象,功能一致,均是在本模块中可以正常使用,但是不能被直接导入并调用

    如果一定要在模块外使用,那么需要导入本模块,然后使用(模块名.变量名)进行调用

    2. 类中

    类中的半私有对象,仅仅是概念上的私有,默认不要在类外进行调用

    实际在类外,均可以使用(实例名.变量名/类名.变量名)进行调用

    私有

    1. 类外

    同半私有一样

    2. 类中

    类中的私有对象,在类外均不能直接调用,可以理解为真私有

    但是python没有完全私有的对象,此种对象可以通过矫直在类外进行调用的(在私有属性名、私有方法名前添加(_类名))

    魔法方法

    这是python自己实现的属性和方法,一般不允许以这种方式自定义属性或方法

    半私有举例:

    在d2.py中调用d1.py中的半私有函数 

    d1.py

    def _init():
        global _global_dict
        _global_dict = {}
    
    
    def set_value(key, value):
        _global_dict[key] = value
    
    def get_value(key):
        return _global_dict[key]

    d2.py

    import d1  # 导入d1模块
    
    d1._init()  # 使用模块名.函数名进行调用
    
    
    d1.set_value('name1', 'zhangsan')
    print(d1.get_value('name1'))

    另,

    d2.py(以下会报错)

    from d1 import *
    
    _init()  # 会提示错误:Unresolved reference '_init'

    d2.py(以下不报错,这是为啥子呢?)

    from d1 import _init
    
    _init()  # 不报错
  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/15527676.html
Copyright © 2011-2022 走看看