【從C#走進Python】三、變數聲明

来源:https://www.cnblogs.com/carmen-019/archive/2020/07/13/13290899.html
-Advertisement-
Play Games

描述Python的變數聲明,可覷其語言設計思路,實現更快地代碼閱讀。 變數聲明 C# public、protect、private、internal 明確指出適用範圍 (完全公開、子類可訪問、僅自己可訪問、程式集內可訪問) Python 有點神奇,沒有不能訪問的變數,一般通過“潛規則”暗示其私有性 ...


  描述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'

類里的方法聲明當中,預設第一個傳入參數就是實例對象,因為這個語法糖設計:

>>> 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'>

 

 

 吐槽:感覺寫短一點閱讀效果好些?~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於vue-codemirror實現的代碼編輯器 開發環境 jshint 2.11.1 jsonlint 1.6.3 script-loader 0.7.2 vue 2.6.11 vue-codemirror 4.0.6 element-ui 2.13.1 (使用到element-ui messag ...
  • 實現功能: 當滑動頁面時,奧運五環固定在中間。 涉及到的知識: 相對定位、絕對定位、固定定位、z-index、border-radius 關鍵知識點: 1、絕對定位和相對定位的區別: position: absolute; 脫離原來位置進行定位;定位的參照物是離自己最近的有定位的父級,參照最近的有定 ...
  • 函數防抖和節流都是對高頻動作觸發回調函數的一個優化,實現方式上有類似之處。先從使用場景做個區分。 防抖使用場景: 表單輸入框校驗 提交按鈕避免重覆提交 節流使用場景: scroll,mousemove,resize等 函數防抖(debounce) 表單輸入框校驗在用戶不停的打字輸入時並不需要向後臺校 ...
  • 前言 在4月21日晚,Vue作者尤雨溪在嗶哩嗶哩直播分享了Vue.js 3.0 Beta最新進展。 裡面尤大大所提到他最近在做的這個小工具 vite ,一個實驗性的no build的vue開發伺服器。(這個小工具可以支持熱更新,且不用預編譯) 一丶安裝 命令行複製以下 mkdir vue-vite  ...
  • 1 #include <stdio.h> 2 3 void createbtree(int *btree,int *data,int len) 4 { 5 int level; //樹的層數 6 int i; 7 8 btree[1] = data[1]; //創建根節點 9 for( i = 2; ...
  • python virtualenv虛擬環境配置與使用 By:賴富玉 QQ:1033553122 概述 python開發過程中,我們可能需要同時開發多款應用,這些應用可能公用同一個版本的Python程式,但是使用不同版本的第三方庫,比如A應用使用six 1.12.0,而B應用需要使用six 1.15. ...
  • 最近一直在研究AQS的源碼,希望可以更深刻的理解AQS的實現原理。雖然網上有很多關於AQS的源碼分析,但是看完以後感覺還是一知半解。於是,我將自己的整個理解過程記錄下來了,希望對大家有所幫助。 基本原理 AQS是Java中鎖的基礎,主要由兩個隊列組成。一個隊列是同步隊列,另一個是條件隊列。 同步隊列 ...
  • 為了方便以後配置新的windows電腦java、idea,所以專門記錄一下 1:JDK JDK是 Java 語言的軟體開發工具包,主要用於移動設備、嵌入式設備上的java應用程式。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。所以首先要配置好j ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...