Python-FAQ-__name__、__main__

1 需求


2 接口


3 示例


4 參考資料

在 Python 中,像?__name__?這樣的雙下劃線屬性(也稱為 "dunder" 屬性,即 "double underscore" 的縮寫)是 Python 的特殊屬性或方法,它們為類、對象或模塊提供了特殊的行為或元數據。以下是一些常見的類似?__name__?的特殊屬性和方法:

1. 模塊級特殊屬性

這些屬性通常在模塊層級使用,提供關于模塊的元信息:

  • __name__
    當前模塊的名稱。如果是主程序,則值為?'__main__';如果是被導入的模塊,則為模塊名。

    if __name__ == '__main__':print("作為主程序運行")
    else:print(f"被導入為模塊: {__name__}")
    
  • __file__
    當前模塊的文件路徑(如果是腳本),或編譯后的字節碼文件路徑(如?.pyc?文件)。

    print(f"模塊文件路徑: {__file__}")
    
  • __doc__
    模塊、類或函數的文檔字符串(docstring)。

    def add(a, b):"""返回兩個數的和"""return a + bprint(add.__doc__)  # 輸出: "返回兩個數的和"
    
  • __package__
    當前模塊所屬的包名稱(用于包內相對導入)。

    print(f"模塊所屬包: {__package__}")
    
  • __loader__
    加載當前模塊的加載器對象。

    print(f"模塊加載器: {__loader__}")
    

2. 類和對象的特殊屬性

這些屬性用于類和對象的底層行為:

  • __class__
    對象所屬的類。

    num = 42
    print(num.__class__)  # 輸出: <class 'int'>
    
  • __dict__
    類或對象的屬性字典,包含所有可寫的屬性。

    class Person:def __init__(self, name):self.name = namep = Person("Alice")
    print(p.__dict__)  # 輸出: {'name': 'Alice'}
    
  • __bases__
    類的基類元組,用于查看繼承關系。

    class Animal: pass
    class Dog(Animal): passprint(Dog.__bases__)  # 輸出: (<class '__main__.Animal'>,)
    
  • __mro__
    類的方法解析順序(Method Resolution Order),用于多重繼承時確定方法調用路徑。

    class A: pass
    class B(A): pass
    class C(B): passprint(C.__mro__)  # 輸出: (<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
    

3. 特殊方法(Magic Methods)

這些雙下劃線方法用于實現對象的特殊行為,如運算符重載、迭代等:

  • __init__(self, ...)
    對象的初始化方法,在創建對象時自動調用。

    class Point:def __init__(self, x, y):self.x = xself.y = y
    
  • __str__(self)
    對象的字符串表示,用于?print()?和?str()?函數。

    class Point:def __str__(self):return f"Point({self.x}, {self.y})"
    
  • __len__(self)
    對象的長度,用于?len()?函數。

    class MyList:def __init__(self, data):self.data = datadef __len__(self):return len(self.data)
    
  • __getitem__(self, key)
    實現對象的索引訪問(如?obj[key])。

    class MyList:def __getitem__(self, index):return self.data[index]
    
  • __call__(self, ...)
    使對象可以像函數一樣被調用。

    class Adder:def __call__(self, a, b):return a + badd = Adder()
    print(add(3, 4))  # 輸出: 7
    

4. 其他特殊屬性

  • __slots__
    限制類實例可以添加的屬性,節省內存。

    class Person:__slots__ = ['name', 'age']  # 只允許添加 'name' 和 'age' 屬性
    
  • __all__
    模塊中使用?from module import *?時要導入的對象列表(需顯式定義)。

    __all__ = ['func1', 'Class1']  # 只導出 func1 和 Class1
    
  • __version__
    模塊或包的版本號(通常由開發者自定義)。

    __version__ = '1.0.0'
    

如何查看對象的所有特殊屬性?

使用?dir()?函數可以獲取對象的所有屬性和方法,包括特殊屬性。過濾出雙下劃線開頭和結尾的屬性即可:

def get_special_attrs(obj):return [attr for attr in dir(obj) if attr.startswith('__') and attr.endswith('__')]# 查看模塊的特殊屬性
import sys
print(get_special_attrs(sys))# 查看類的特殊屬性
class MyClass: pass
print(get_special_attrs(MyClass))# 查看對象的特殊屬性
obj = MyClass()
print(get_special_attrs(obj))

注意事項

  1. 不要隨意修改特殊屬性:這些屬性是 Python 的底層機制,修改它們可能導致意外行為。
  2. 按需實現特殊方法:特殊方法(如?__str__)用于增強對象的行為,但需謹慎使用。
  3. 避免與特殊屬性重名:自定義屬性和方法應避免使用雙下劃線開頭和結尾的名稱,以免與 Python 的特殊機制沖突。

通過了解這些特殊屬性和方法,可以更深入地理解 Python 的運行機制,并編寫出更具 Python 風格的代碼。

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

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

相關文章

Adobe高階技巧與設計師創意思維的進階指南

作為一名在全球設計圈摸爬滾打了十年的職業設計師&#xff0c;我深知創意與技術的結合是點燃靈感的火花。憑借英國Parvis School of Economics and Music大學提供的Adobe正版教育訂閱&#xff0c;我得以在設計之路上不斷探索與突破。今天&#xff0c;我想以輕松實用的口吻&…

音視頻會議服務搭建(設計方案-Go服務端API業務邏輯流程圖)-04

前言 這一篇是 關于 Go服務端相關的音視頻會議的接口API業務邏輯流程圖肯定是不能完全復用到你的項目中去的&#xff0c;但是希望對你有一些參考性的幫助嗯&#xff0c;我也是在不斷的進行完善和優化&#xff0c;并不是最終的結構&#xff0c;先定好大方向&#xff0c;然后不斷…

C++ Qt Widget繪圖畫布縮放與平移:實現CAD級交互體驗

在圖形應用程序開發中&#xff0c;實現流暢的縮放和平移功能是創建專業級繪圖工具的基礎。本文將深入探討如何在Qt Widget中實現CAD級別的交互體驗&#xff0c;包括視圖變換、坐標系統管理以及交互功能實現。核心概念&#xff1a;視圖變換與坐標系統 在圖形應用中&#xff0c;我…

Paimon 位圖索引解析:高效等值查詢的秘密( Bit-Sliced Index)

BitmapFileIndexBitmapFileIndex 這個類 是 Paimon 中一個非常重要的索引類型&#xff0c;它使用位圖&#xff08;Bitmap&#xff09;來精確定位數據&#xff0c;尤其擅長處理低基數&#xff08;low-cardinality&#xff09;列的等值查詢。BitmapFileIndex 實現了 FileIndexer …

S7-1200 CPU 與 S7-200 CPU S7通信(S7-1200 作為服務器

7-1200 CPU 與 S7-200 CPU S7通信&#xff08;S7-1200 作為服務器&#xff09; S7-1200 CPU 與 S7-200 CPU 之間的通信只能通過 S7 通信來實現&#xff0c;因為 S7-200 的以太網模塊只支持S7 通信。當S7-200作為客戶端&#xff0c;S7-1200作為服務器&#xff0c;需在客戶端單邊…

pyspark大規模數據加解密優化實踐

假如有1億行數據 方法1 spark udf解密 from pyspark.sql import SparkSession import pyspark.sql.functions as F from pyDes import * import binasciisparkSparkSession.builder.getOrCreate()def dec_fun(text):key triple_des(b"HHHHHHHHHHHHHHHHHHHHHHHH", CB…

華為云Flexus+DeepSeek征文|華為云ECS與CCE:從介紹到架構部署·僅需要此文足矣

前引&#xff1a;當今的企業面臨著前所未有的技術挑戰&#xff1a;如何構建既安全又高效、既靈活又可靠的云服務架構&#xff1f;如何有效整合人工智能技術&#xff0c;打造智能化的運維和服務體系&#xff1f;這些問題的答案&#xff0c;正在悄然改變著企業級IT基礎設施的生態…

DAY 50 預訓練模型+CBAM模塊

浙大疏錦行https://blog.csdn.net/weixin_45655710 知識點回顧&#xff1a; resnet結構解析CBAM放置位置的思考針對預訓練模型的訓練策略 差異化學習率三階段微調 作業&#xff1a; 好好理解下resnet18的模型結構嘗試對vgg16cbam進行微調策略 ResNet-18 結構核心思想 可以將R…

docker連接mysql

查看在運行的容器&#xff1a;docker ps -s 進入容器&#xff1a;docker exec -it 容器號或名 /bin/bash&#xff0c;如&#xff1a;docker exec -it c04c438ff177 /bin/bash 或docker exec -it mysql /bin/bash。 3. 登錄mysql&#xff1a;mysql -uroot -p123456

javaweb第182節Linux概述~ 虛擬機連接不上FinalShell

問題描述 虛擬機無法連接到finalshell 報錯 session.connect:java.net.socketexception:connection reset 或者 connection is closed by foreign host 解決 我經過一系列的排查&#xff0c;花費了一天的時間后&#xff0c;發現&#xff0c;只是因為&#xff0c;我將連接…

高壓電纜護層安全的智能防線:TLKS-PLGD 監控設備深度解析

在現代電力系統龐大復雜的網絡中&#xff0c;高壓電纜護層是守護電力傳輸的 "隱形鎧甲"&#xff0c;其安全直接影響電網穩定。傳統監測手段響應慢、精度低&#xff0c;難以滿足安全運維需求。TLKS-PLGD 高壓電纜護層環流監控設備應運而生&#xff0c;提供智能化解決方…

Element-Plus Cascader 級聯選擇器獲取節點名稱和value值方法

html 部分 <template><el-cascaderref"selectAeraRef":options"areas":disabled"disabled":props"optionProps"v-model"selectedOptions"filterablechange"handleChange"><template #default"…

STM32中實現shell控制臺(命令解析實現)

文章目錄一、核心設計思想二、命令系統實現詳解&#xff08;含完整注釋&#xff09;1. 示例命令函數實現2. 初始化命令系統3. 命令注冊函數4. 命令查找函數5. 命令執行函數三、命令結構體&#xff08;cmd\_t&#xff09;四、運行效果示例五、小結在嵌入式系統的命令行控制臺&am…

基于matlab的二連桿機械臂PD控制的仿真

基于matlab的二連桿機械臂PD控制的仿真。。。 chap3_5input.m , 1206 d2plant1.m , 1364 hs_err_pid2808.log , 15398 hs_err_pid4008.log , 15494 lx_plot.m , 885 PD_Control.mdl , 35066 tiaojie.m , 737 chap2_1ctrl.asv , 988 chap2_1ctrl.m , 905

TCP、HTTP/1.1 和HTTP/2 協議

TCP、HTTP/1.1 和 HTTP/2 是互聯網通信中的核心協議&#xff0c;它們在網絡分層中處于不同層級&#xff0c;各有特點且逐步演進。以下是它們的詳細對比和關鍵特性&#xff1a;1. TCP&#xff08;傳輸控制協議&#xff09; 層級&#xff1a;傳輸層&#xff08;OSI第4層&#xff…

Java+Vue開發的進銷存ERP系統,集采購、銷售、庫存管理,助力企業數字化運營

前言&#xff1a;在當今競爭激烈的商業環境中&#xff0c;企業對于高效管理商品流通、采購、銷售、庫存以及財務結算等核心業務流程的需求日益迫切。進銷存ERP系統作為一種集成化的企業管理解決方案&#xff0c;能夠整合企業資源&#xff0c;實現信息的實時共享與協同運作&…

【趣談】Android多用戶導致的UserID、UID、shareUserId、UserHandle術語混亂討論

【趣談】Android多用戶導致的UserID、UID、shareUserId、UserHandle術語混亂討論 備注一、概述二、概念對比1.UID2.shareUserId3.UserHandle4.UserID 三、結論 備注 2025/07/02 星期三 在與Android打交道時總遇到UserID、UID、shareUserId、UserHandle這些術語&#xff0c;但是…

P1424 小魚的航程(改進版)

題目描述有一只小魚&#xff0c;它平日每天游泳 250 公里&#xff0c;周末休息&#xff08;實行雙休日)&#xff0c;假設從周 x 開始算起&#xff0c;過了 n 天以后&#xff0c;小魚一共累計游泳了多少公里呢&#xff1f;輸入格式輸入兩個正整數 x,n&#xff0c;表示從周 x 算起…

<二>Sping-AI alibaba 入門-記憶聊天及持久化

請看文檔&#xff0c;流程不再贅述&#xff1a;官網及其示例 簡易聊天 環境變量 引入Spring AI Alibaba 記憶對話還需要我們有數據庫進行存儲&#xff0c;mysql&#xff1a;mysql-connector-java <?xml version"1.0" encoding"UTF-8"?> <pr…

【機器學習深度學習】模型參數量、微調效率和硬件資源的平衡點

目錄 一、核心矛盾是什么&#xff1f; 二、微調本質&#xff1a;不是全調&#xff0c;是“挑著調” 三、如何平衡&#xff1f; 3.1 核心策略 3.2 參數量 vs 微調難度 四、主流輕量微調方案盤點 4.1 凍結部分參數 4.2 LoRA&#xff08;低秩微調&#xff09; 4.3 量化訓…