欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Python的特殊变量和用法

Python的特殊变量和用法

2025/1/14 22:23:01 来源:https://blog.csdn.net/weixin_44563460/article/details/145082575  浏览:    关键词:Python的特殊变量和用法

在Python中,特殊变量通常以双下划线(__)开头和结尾,它们具有特定的含义和用途。以下是一些常见的Python特殊变量:

  1. name

当Python文件被直接运行时,__name__的值为"main"。
当Python文件作为模块被导入时,__name__的值为模块的名称。 常用于判断文件是直接运行还是被导入。

# example.py
print(__name__)# 如果直接运行example.py,输出将是 '__main__'
# 如果从另一个脚本导入example.py,输出将是 'example'(模块名)
  1. file

存储了模块的文件路径。 通过这个变量,可以获取模块所在的文件路径。

# example.py
print(__file__)# 输出example.py文件的路径
  1. doc

用于存储模块、类、函数等对象的文档字符串(docstring)。
文档字符串通常包含对对象的说明、用法示例等,可以通过__doc__变量来访问。

# example.py
"""这是一个示例模块。"""print(__doc__)# 输出模块的文档字符串
  1. class

用于指向实例所属的类。

class MyClass:passobj = MyClass()
print(obj.__class__)  # 输出:<class '__main__.MyClass'>
  1. init

类的构造函数,在创建对象时自动调用,用于初始化对象。 注意:虽然__init__不是一个变量,但它是类中的一个特殊方法,因此在这里一并提及。

class MyClass:def __init__(self, value):self.value = valueobj = MyClass(10)
print(obj.value)  # 输出:10
  1. del

类的析构函数,在对象被删除时自动调用,用于执行清理工作。 同样地,__del__也不是一个变量,但它是类中的一个特殊方法。

class MyClass:def __del__(self):print("对象被删除了")obj = MyClass()
# 当obj超出作用域或被显式删除时,__del__方法会被调用
# 注意:在某些情况下,如循环引用,__del__可能不会被立即调用
  1. dict

存储对象或类的属性和方法。 对于对象,它包含实例属性。 对于类,它包含类属性和方法。

class MyClass:def __init__(self, value):self.value = valueobj = MyClass(10)
print(obj.__dict__)  # 输出:{'value': 10}
  1. slots

一个类属性,用于声明类的实例可以有哪些属性。 使用__slots__可以限制实例的属性,并节省内存。

class MyClass:__slots__ = ['value']def __init__(self, value):self.value = value# 尝试给实例添加不在__slots__中的属性会抛出AttributeError
# obj = MyClass(10)
# obj.other_value = 20  # 这行代码会抛出异常
  1. getitemsetitemdelitem

分别用于实现对象的索引、赋值和删除操作。 这使得对象可以像列表或字典那样进行索引、赋值和删除操作。

class MyList:def __init__(self):self.values = []def __getitem__(self, index):return self.values[index]def __setitem__(self, index, value):self.values[index] = valuedef __delitem__(self, index):del self.values[index]my_list = MyList()
my_list.values = [1, 2, 3]  # 初始化内部列表
print(my_list[1])  # 输出:2
my_list[1] = 4
print(my_list[1])  # 输出:4
del my_list[1]
print(my_list[1])  # 输出:3(注意:这里的输出取决于内部实现,可能抛出IndexError)
  1. call

使得一个对象可以像函数那样被调用。 当定义了__call__方法后,可以直接使用对象名加括号的形式来调用它。

newinit 的区别:
__new__是一个静态方法,用于创建并返回类的实例。
__init__是一个实例方法,用于初始化实例。 在创建对象时,__new__方法先被调用,然后是__init__方法。

class CallableClass:def __call__(self, x):return x * 2obj = CallableClass()
print(obj(5))  # 输出:10
class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)return cls._instancedef __init__(self, value):if not hasattr(self, 'initialized'):  # 防止在__init__被多次调用时出错self.value = valueself.initialized = Trueobj1 = Singleton(10)
obj2 = Singleton(20)
print(obj1.value)  # 输出:10
print(obj2.value)  # 输出:10(因为obj1和obj2是同一个实例)
print(obj1 is obj2)  # 输出:True

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com