描述Python的變數宣告,可覷其語言設計思路,實作更快地代碼閱讀,
|
變數宣告 |
|
|
C# |
|
|
public、protect、private、internal |
明確指出適用范圍 (完全公開、子類可訪問、僅自己可訪問、程式集內可訪問) |
|
Python |
|
|
有點神奇,沒有不能訪問的變數,一般通過“潛規則”暗示其私有性 Tips:下劃線underline,雙下劃線在一些論壇里面就是double underline,簡稱dunder |
|
|
_var |
程式員潛規則,這是個私有變數,訪問改寫慎重 |
|
_funName 使用通配符匯入(from myModule import * ),不可見 通配符匯入模塊,不會匯入單下劃線的名稱,除非重寫__all__ 使用名字匯入(import myModule),可見 |
|
|
var_ |
避免和python解釋器的關鍵詞相撞的詞,例如class_ |
|
__var |
允許父類與子類有相同的名字并且相互獨立(子類該屬性不覆寫父類) >>> class father: ... def __init__(self): ... self.__name = 'ff' ... self._test = 't' ... >>> class son(father): ... def __init__(self): ... super().__init__() ... self.__name = 'ss' ... self._id = '1' ... >>> s = son() >>> dir(s) ['__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__', '_father__name', '_id', '_son__name', '_test'] 名稱被改寫了,其實是為了防止被子類覆寫, (前雙劃線改寫名字適用于屬性與方法) |
|
這種前dunder改寫名字的特性,不受類束縛: >>> _MangledGobal__mangled = 11 >>> class MangledGobal(): ... def test(self): ... return __mangled ... >>> MangledGobal().test() 11 目前感覺隱藏坑還是有些多 |
|
|
__var__ |
解釋器內置方法,程式員應該避免這種命名 (以免與已有或者未來會有的內置方法相撞) |
|
_ |
臨時變數(用完就丟的意思) 在互動視窗中表示上一個陳述句的結果 |
|
self |
常見詞,以前我以為它就是C#里this的意思,雖然它也確實是; 但C#的this是固定(一個字母都不能變動)的關鍵詞, Python當中self可以不叫self,隨你起名(按照潛規則來說當然還是叫self穩妥),它只要在類的方法宣告中占據第一個引數位置就可以, >>> class test: ... def __init__(dogee): ... dogee.name = 'dog' ... >>> test().name 'dog' 類里的方法宣告當中,默認第一個傳入引數就是實體物件, 這個語法糖叫點語法(dot syntax): >>> class test: ... def __init__(dogee): ... dogee.name = 'dog' ... def printName(doge): ... print(doge.name) ... >>> t = test() >>> test.printName(t) dog 這個語法糖看似雞肋,但從這個設計上就能明白self的設定, 注意,編程約定實體方法第一個入參是self |
|
cls |
型別本身也是一種物件,cls表示型別; 例如類方法,它的首個入參就不是實體物件,而是類物件: >>> class test: ... def __init__(dogee): ... dogee.name = 'dog' ... @classmethod ... def classMethod(cls): ... print(f'class method called, cls: {cls}') >>> test.classMethod() class method called, cls: <class '__main__.test'> >>> test().classMethod() class method called, cls: <class '__main__.test'>
|
命名規則:C#習慣使用駱峰法,Python慣常用蛇形法
|
命名法 |
|
|
駱峰命名法 (camel case) |
示例: userName(臨時變數) _userName(私有變數) UserName(公開變數) |
|
以大小寫區分單詞隔開,行距緊湊 |
|
|
蛇形命名法 (snake case) |
示例: user_name |
|
下劃線拉大詞距,全小寫無需切換 |
|
|
Tips: 在python編程中,可以結合兩種命名方式, 不過在包名、模塊名、方法名、普通變數名中,更推薦用蛇形命名法 |
|
吐槽:感覺寫短一點閱讀效果好些?~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88127.html
標籤:Python
