【Python】全局變量與init的區別

一個腳本里,設置全局變量,和初始化類時__init__中加載,有什么區別?

在Python腳本中,使用全局變量和在類的__init__方法中加載數據有幾個關鍵區別:

  1. 作用域

    • 全局變量:全局變量在整個模塊或腳本中都是可見的,除非被明確地隱藏或覆蓋(例如,在函數或類中定義了同名的局部變量)。
    • 類的__init__方法中的變量:在__init__方法中初始化的變量是實例變量,它們只對該類的每個實例可見。除非你創建了一個類變量(使用類名來定義),否則這些變量不會在類的不同實例之間共享。
  2. 生命周期

    • 全局變量:全局變量的生命周期通常與腳本的運行時間一致,一旦被創建,它們就會一直存在,直到腳本結束或者變量被顯式刪除。
    • 類的__init__方法中的變量:這些變量的生命周期與類實例的生命周期綁定。當類的實例被創建時,這些變量就會被初始化,當實例被銷毀時,這些變量也會隨之消失。
  3. 內存管理

    • 全局變量:由于全局變量在整個應用程序中都是可訪問的,因此它們不容易被垃圾回收,可能會導致內存占用較高。
    • 類的__init__方法中的變量:這些變量只在類實例存在時占用內存。如果類實例被刪除,相關的內存就可以被Python的垃圾回收機制回收。
  4. 封裝

    • 全局變量:全局變量不屬于任何類或函數,它們不提供封裝的好處。這可能導致命名沖突,以及在大型應用程序中難以追蹤變量的改變。
    • 類的__init__方法中的變量:這些變量被封裝在類的實例中。這意味著它們可以通過類的方法來管理,提供了更好的封裝,可以隱藏實現細節,只通過公共接口暴露功能。
  5. 可維護性和可測試性

    • 全局變量:過度使用全局變量可能會導致代碼難以維護和測試,因為全局變量可以在程序的任何地方被修改,這使得追蹤和理解代碼變得更加困難。
    • 類的__init__方法中的變量:通過類實例管理的數據通常更容易維護和測試,因為數據和行為被封裝在一起,可以通過實例化對象在不同的環境中重復使用和測試。

總的來說,全局變量在某些情況下可能是有用的,例如,對于跨多個函數和類共享的常量。然而,為了更好的封裝和代碼組織,通常建議盡可能地在類的__init__方法中初始化數據,這樣可以利用面向對象編程的所有優勢,包括封裝、繼承和多態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14187.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C中十進制轉十六進制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通過以下…

嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動

目錄 一、概述 二、應用場景 三、移動硬盤安裝Ubuntu 3.1 移動硬盤格式化 3.2 VMware安裝Ubuntu到移動硬盤 四、電腦BIOS啟動移動硬盤Ubuntu 五、從VMware啟動移動硬盤Ubuntu 六、問題解決(坑)和思考提問 嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動 一、概述 在移動硬…

在R中贊揚下努力工作的你,獎勵一份CheetShet

傳說有個R,R里有個包,包的名字叫praise,會一直不停地夸贊你。 > praise() [1] "You are sensational!" > praise() [1] "You are luminous!" > praise() [1] "You are pioneering!" > praise() […

P1【知識點】【數據結構】【鏈表LinkedList】C++版

鏈表是一種邏輯上連續,內存上分散的線性表數據結構,是用一組任意的空間(可以連續,也可以不連續)來存放數據元素。每個數據元素成為一個”結點“,每個結點由數據域和指針域組成。 訪問元素(Acce…

ABAP Json解析案例

ABAP解析返回的JSON 案例 DATA:LTOKEN TYPE STRING.DATA: LL_LINES(10),"行數LL_TABIX(10),"循環標號LL_PECNT TYPE P LENGTH 6 DECIMALS 2, "百分比LL_PECET(6),"百分數LL_TEXT(40)."消息CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.* …

JVM優化之使用Jstack命令查找JVM死鎖

JVM優化之使用Jstack命令查找JVM死鎖 示例代碼 public class DeadLockDemo {private static Object lock1 new Object();private static Object lock2 new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lock1) {try {System.out.p…

老的 IIS + MSSQL 網站遷移實例

因為公司需要從云上遷移回本地,但云平臺不愿意導出虛擬機文件,所以公司需要手工遷移。 查看了一下云主機,安裝了IIS,還有MSSQL數據庫,于是在本地搭建好相同的OSIISMSSQL 環境,在把數據庫導入完成、 IIS 搭建…

HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池芯片IC

一般描述 該HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池。HX6203為快速充電鋰離子電池提供了一種小巧、簡單、高效的解決方案。一個外部檢測電阻以高精度設置充電電流。 內部電阻分壓器和精密參考設置的最終浮動電壓為8.4V時,輸入…

全面提升工業物聯網的安全問題——青創智通

工業物聯網解決方案-工業IOT-青創智通 工業物聯網,作為現代工業制造領域的新興技術,正在引領一場全新的工業革命。它將傳感器、控制器、移動通信、智能分析等先進技術融入到工業生產過程的各個環節,極大地提高了制造效率,改善了產…

什么是谷歌留痕?

其實它就是指你的網站在谷歌中留下的種種痕跡,無論你是在做外鏈,還是優化網站內容,或是改善用戶體驗,所有這些都會在谷歌的搜索引擎里留下一些“腳印”,用比較seo一點的說法,指的是網站在其構建和優化過程中…

el-table 劃入劃出方法

<template><div><el-table :data"tableData" style"width: 100%" cell-mouse-enter"handleMouseEnter" cell-mouse-leave"handleMouseLeave"><el-table-column prop"ddd" label"日期2" widt…

Stable Diffusion ComfyUI:概念及介紹

在研究和應用深度學習技術的領域&#xff0c;尤其是穩定擴散&#xff08;Stable Diffusion&#xff09;模型&#xff0c;一個直觀的用戶界面對于提升效率和理解模型的能力至關重要。Stable Diffusion ComfyUI是一個專門為穩定擴散算法設計的界面工具&#xff0c;它提供了一套易…

GBase 8s 檢查是否是IP且轉數值函數

GBase 8s中沒有ip類型字段&#xff08;如inet&#xff09;&#xff0c;對于判斷字符串是否是IP地址&#xff0c;需要自己編寫相應的函數。 如下&#xff0c;實現檢查輸入的字符串是否為IPv4地址&#xff08;-1否&#xff09;&#xff0c;且轉換成數值類型&#xff1a; -- func…

數據分析案例——電商平臺數據集

數據來源于阿里云天池&#xff0c;為淘寶app平臺在2014年11月18日-12月18日的數據。 數據處理 導入相關的包&#xff0c;設置seaborn的繪圖風格&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set()使用o…

Little Snitch for Mac(小飛賊防火墻軟件)v5.7.6注冊激活版

Little Snitch for Mac&#xff0c;也被稱為“小飛賊”防火墻軟件&#xff0c;是一款專為Mac用戶設計的網絡安全工具。以下是關于Little Snitch for Mac的一些主要特點&#xff1a; Little Snitch for Mac(小飛賊防火墻軟件)v5.7.6注冊激活版下載 強大的監控能力&#xff1a;Li…

Rust:如何在 Windows 的 Linux 子系統(WSL)下安裝

一、安裝步驟 在Windows Subsystem for Linux (WSL)下安裝Rust&#xff0c;可以按照以下步驟進行&#xff1a; 打開WSL終端&#xff1a; 首先&#xff0c;確保你的WSL已經安裝并正常運行。你可以在Windows搜索欄中輸入“WSL”并選擇你安裝的Linux發行版&#xff08;如Ubuntu&a…

leetcode-順時針旋轉矩陣-111

題目要求 思路 1.假設現在有一個矩陣 123 456 789 2.我們可以根據19這個對角線將數據進行交換&#xff0c;得到矩陣 147 258 369 3.然后將矩陣每一行的數據再翻轉&#xff0c;得到矩陣 741 852 963 代碼實現 class Solution { public:vector<vector<int> > rot…

Django自定義模板標簽與過濾器

title: Django自定義模板標簽與過濾器 date: 2024/5/17 18:00:02 updated: 2024/5/17 18:00:02 categories: 后端開發 tags: Django模版自定義標簽過濾器開發模板語法Python后端前端集成Web組件 Django模板系統基礎 1. Django模板語言概述 Django模板語言&#xff08;DTL&…

【譯】MySQL復制入門: 探索不同類型的MySQL復制解決方案

原文地址&#xff1a;An Introduction to MySQL Replication: Exploring Different Types of MySQL Replication Solutions 在這篇博文中&#xff0c;我將深入介紹 MySQL 復制&#xff0c;回答它是什么、如何工作、它的優勢和挑戰&#xff0c;并回顧作為 MySQL 環境&#xff0…

【Qt】深入探索Qt主窗口與菜單欄:構建高效用戶界面的實踐指南

文章目錄 前言1. 什么是Main Window?2. 詳細了解一下其中的 菜單欄&#xff1a;2.1. 創建菜單欄2.2. 添加快捷鍵2.3. 添加子菜單2.4. 添加分割線2.5. 添加圖標 3. 內存泄漏問題&#xff1a;總結 前言 在現代軟件開發中&#xff0c;用戶界面的設計對于提升用戶體驗至關重要。Q…