在 Python3 中,有一些特殊的预定义属性和属性集合。这些特殊属性和属性集合在 Python 中起着重要作用,帮助程序员更好地控制类的行为以及模块的导入行为。
__init__是一个在类实例化时被调用的特殊方法,通常用于初始化实例的属性。
__main__是 Python 程序的主模块,即当前执行的脚本,可以通过该属性在模块被直接运行时执行一些特定的代码块。
__all__是一个模块属性,用于定义在使用 from module import * 语法时,应该导入的所有公开的符号(变量、类、函数等)的列表。
__slots__是一个类属性,用于限制该类的实例能够拥有的属性,从而节省内存并使访问属性更快。定义 slots 后,实例将只能绑定 slots 中指定的属性。
__doc__用于存储类、函数或模块的文档字符串。
__name__用于存储模块的名称,当模块作为主程序执行时,name 的值为 ‘main’。
__file__用于存储模块的文件路径。
__dict__一个包含对象的属性的字典,将属性名映射到属性值。
__class__指向对象的类。
__bases__存储类的基类元组。
# __init__
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
# __main__
if __name__ == '__main__':
print("This script is being run directly.")
else:
print("This script is being imported.")
# __slots__
class Point:
__slots__ = ['x', 'y']
point = Point()
point.x = 10
point.y = 20
# __doc__
def square(x):
"""Return the square of a number."""
return x ** 2
print(square.__doc__)
# __name__
print(__name__)
# __file__
print(__file__)
# __dict__
class MyClass:
def __init__(self):
self.x = 10
self.y = 20
obj = MyClass()
print(obj.__dict__)
# __class__
print(obj.__class__)
# __bases__
class BaseClass:
pass
class SubClass(BaseClass):
pass
print(SubClass.__bases__)
这些特殊的预定义属性和属性集合在 Python 中具有特殊的作用,可以帮助程序员更好地控制和管理对象、类、模块等的行为。使用这些特殊属性和属性集合可以使代码更加灵活、易于理解和维护。