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()  # 不報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM