ai agent(智能体) 开发 python基础4 __init__、__dict__、__name__ 和 __main__ 讲解

在 Python 中,以双下划线开头和结尾的属性和方法被称为特殊成员(或“魔术方法”),它们在类和模块中具有特定用途。以下是 __init____dict____name____main__ 的详细解释及示例:


1. __init__:构造函数

  • 作用:用于初始化类的实例对象,在创建对象时自动调用。
  • 特点
    • 不是真正的构造函数(实际构造函数是 __new__),但常用作初始化逻辑。
    • 第一个参数必须是 self(表示实例本身),后续参数可自定义。
  • 示例
    class User:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    user = User("Alice", 25)
    print(user.name)  # 输出: Alice
    

2. __dict__:属性字典

  • 作用:存储对象或类的所有可写属性,以字典形式返回。
  • 适用场景
    • 查看实例或类的属性和方法。
    • 动态添加或修改属性。
  • 示例
    class User:
        def __init__(self, name):
            self.name = name
    
    user = User("Bob")
    
    # 查看实例属性
    print(user.__dict__)  # 输出: {'name': 'Bob'}
    
    # 动态添加属性
    user.__dict__["age"] = 30
    print(user.age)       # 输出: 30
    

3. __name__:名称属性

  • 作用:获取对象(模块、类、函数等)的名称。
  • 常见用法
    • 模块:若模块被直接运行,__name__'__main__';若被导入,则为模块名。
    • 类/函数:返回定义时的名称。
  • 示例
    # 文件名为 my_module.py
    def my_func():
        pass
    
    class MyClass:
        pass
    
    print("模块名:", __name__)        # 直接运行时输出: __main__
    print("函数名:", my_func.__name__) # 输出: my_func
    print("类名:", MyClass.__name__)  # 输出: MyClass
    

4. __main__:主模块标识

  • 作用:表示当前脚本是主程序入口(而非被导入的模块)。
  • 典型用法:用 if __name__ == '__main__': 区分模块是被导入还是直接运行。
  • 示例
    # 文件名为 app.py
    def main():
        print("程序启动")
    
    if __name__ == '__main__':
        main()  # 直接运行 app.py 时执行
    
    • 直接运行 app.py 会执行 main()
    • 导入 app 模块时,main() 不会自动执行。

总结表格

特殊成员用途常见场景
__init__初始化对象属性类的构造函数
__dict__查看或动态操作对象的属性字典调试、动态编程
__name__获取模块/类/函数的名称模块执行判断、反射
__main__标识当前模块为主程序入口代码入口保护(if __name__...

进阶用法

1. __dict__ 与动态属性

可以通过修改 __dict__ 动态添加或删除属性:

user = User("Charlie")
user.__dict__["email"] = "charlie@example.com"
del user.__dict__["name"]
print(user.email)  # 输出: charlie@example.com
2. __name__ 用于反射

通过类名动态创建实例:

class Dog:
    pass

class Cat:
    pass

# 根据字符串类名创建对象
class_name = "Dog"
animal = globals()[class_name]()
print(type(animal))  # 输出: <class '__main__.Dog'>

掌握这些特殊成员,能更灵活地控制 Python 对象和模块的行为!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值