栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python

这里写目录标题
  • 1. python
    • 1.1. 下划线 `__` 开头的变量
      • 1.1.1. 示例
      • 1.1.2. 公有变量名
      • 1.1.3. 半私有变量名
      • 1.1.4. 私有变量名
      • 1.1.5. 魔法方法

1. python 1.1. 下划线 __ 开头的变量 1.1.1. 示例
# 以数字、字母开头:  正常的公有变量名
a = 1
def aa():
    pass

# 以单下划线开头:  半私有的变量名
_b = 2
def _bb():
    pass

# 以双下划线开头:  私有变量名
__c = 3
def __cc():
    pass

# 以双下划线开头, 双下划线结尾:  内置属性名或者魔法方法名
__name__, __dir__
1.1.2. 公有变量名

以此类名称命名的对象, 为公有对象, 任何人都可以使用。

1.1.3. 半私有变量名

以此类名称命名的对象, 需要分为两种情况

  1. 类外

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

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

  1. 类中

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

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

1.1.4. 私有变量名

以此类名称命名的对象, 也需要分为两种情况

  1. 类外

此种情况下的对象, 和半私有对象一样, 可参照上面

  1. 类中

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

但是, python 中没有完全私有的对象, 此种对象也是可以在类外进行调用的, 这里涉及到一个概念: 矫直

class A:
 
    def get_1(self):
        return 1
 
    def _get_2(self):
        return 2
 
    def __get_3(self):
        return 3
 
print(dir(A))
 
结果为: 
['_A__get_3', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'__weakref__', '_get_2', 'get_1']

从打印结果中我们看到, 类 A 并不存在 __get_3 这么一个属性, 但是存在一个 _A__get_3 的属性, 这就是矫直

python 对于出现在类中的私有属性或者私有方法, 进行矫直, 矫直方法就是在私有属性名、私有方法名前添加( _类名 )

那么, 我们想要调用类的私有属性和方法的时候, 就可以直接用矫直后的属性名进行调用。

1.1.5. 魔法方法

这是 python 自己实现的属性和方法, 一般不允许自定义类似此种命名方式的属性或者方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号