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 量化训…