本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
在Python中,__slots__ 是一个特殊的类属性,它用于声明类的实例将拥有哪些属性。使用 __slots__ 可以限制该类实例能拥有的属性名称,并在一定程度上节省内存,特别是在创建大量实例时。这是因为使用 __slots__ 时,Python不会为每个实例创建一个 __dict__ 字典来存储属性,而是使用一个固定大小的数组。
vars(object)
-
object:可选参数,要获取属性的对象,可以是模块、类、实例对象或其他具有 __dict__ 属性的对象。如果不提供参数,则vars()函数将返回当前作用域的局部变量命名空间,即等同于locals()函数。
-
如果 object 是模块,返回模块的 __dict__ 属性,其中包含了模块的所有全局变量和函数。 -
如果 object 是类,返回类的 __dict__ 属性,其中包含了类的所有属性和方法。 -
如果 object 是实例对象,返回实例对象的 __dict__ 属性,其中包含了实例对象的所有属性和它们的值。
下面是一些使用 vars() 函数的示例:
-
示例 1:模块对象
x = 10def my_function():pass
# 导入模块
import mymodule
# 使用 vars() 获取模块对象的属性
vars(mymodule).keys()
# 输出:dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__file__', '__cached__', '__builtins__', 'x', 'my_function'])
-
示例 2:类对象
在类中使用 vars() 函数可以获取类的所有属性和方法:
class MyClass:
class_var = 5
def __init__(self):
self.instance_var = 10
# 使用 vars() 获取类对象的属性
vars(MyClass)
# 输出:mappingproxy({'__module__': '__main__',
# 'class_var': 5,
# '__init__': <function __main__.MyClass.__init__(self)# >,
# '__dict__': <attribute '__dict__' of 'MyClass' objects>,
# '__weakref__': <attribute '__weakref__' of 'MyClass' objects>,
# '__doc__': None})
-
示例 3:实例对象
在实例对象中使用 vars() 函数可以获取对象的所有属性和属性值:
# 继续使用上面的 MyClass 类
my_instance = MyClass()
# 使用 vars() 获取实例对象的属性
vars(my_instance)
# 输出:{'instance_var': 10}
vars() 函数返回的是对象的 __dict__ 属性,即返回的是对象属性的引用。如果修改了返回的字典,对象的属性值也会相应地发生变化。
在下面的示例中,使用 vars() 函数修改了student对象的age属性的值以及动态添加对象属性 height。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
student = Student("Bob", 25)
# 修改对象的属性
vars(student)['age'] = 26
# 添加对象属性
vars(student)['height'] = 178
# 查看修改后的属性
print(vars(student))
# 输出:{'name': 'Bob', 'age': 26, 'height': 178}
需要注意的是,虽然 vars() 函数可以修改对象属性值,但这不是推荐的做法。通常情况下,应该直接访问对象的属性并进行修改,而不是绕过对象的方法。


本篇文章来源于微信公众号: 码农设计师
