python之vars函数使用介绍

在 Python 中,vars() 是一个内置函数,它可以用来获取对象的属性字典。

1. vars() 函数的用法

        无参数调用 vars():

                当不带参数调用 vars() 时,它会返回当前本地作用域中的变量名和值组成的字典。

        带参数调用 vars():

                当传递一个对象作为参数时,vars() 会返回该对象的属性字典。这等价于 object.__dict__。

下面是一些示例:

# 无参数调用
x = 10
y = 20
print(vars())
# 输出: {'x': 10, 'y': 20, '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}

# 带参数调用
class MyClass:
    def __init__(self, a, b):
        self.a = a
        self.b = b

obj = MyClass(1, 2)
print(vars(obj))
# 输出: {'a': 1, 'b': 2}

在上面的例子中:

第一个 vars() 调用没有参数,因此它返回了当前局部作用域中的所有变量及其值。

第二个 vars() 调用传递了一个 MyClass 对象作为参数,因此它返回了该对象的属性字典

2. vars() 函数的常见用途

        检查对象的属性

        动态添加或修改对象属性

        实现反射和元编程技术

        下面介绍 vars() 函数的详细用法。

2.1 使用 vars() 获取模块属性

除了获取局部作用域和对象属性,vars() 也可以用于获取模块级别的属性:

import math
print(vars(math))
# 输出: {..., 'pi': 3.141592653589793, 'e': 2.718281828459045, ...}

2.2 使用 vars() 动态修改属性

由于 vars() 返回的是对象的属性字典,我们可以通过修改字典来动态修改对象的属性:

class MyClass:
    def __init__(self, a, b):
        self.a = a
        self.b = b

obj = MyClass(1, 2)
print(vars(obj))  # 输出: {'a': 1, 'b': 2}
vars(obj)['a'] = 10
print(vars(obj))  # 输出: {'a': 10, 'b': 2}

 2.3 使用 vars() 实现反射

反射是一种动态访问对象属性的技术,vars() 可以帮助我们实现这一点:

class MyClass:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def my_method(self):
        print("This is my_method")

obj = MyClass(1, 2)
method_name = "my_method"
if method_name in vars(obj):
    getattr(obj, method_name)()  # 输出: This is my_method

 2.4 使用 vars() 进行元编程

利用 vars() 可以实现一些元编程技术,比如动态添加或修改类的属性和方法:

class MyClass:
    pass

obj = MyClass()
vars(MyClass)["new_attribute"] = 42
vars(obj)["new_method"] = lambda self: print("This is a new method")
print(MyClass.new_attribute)  # 输出: 42
obj.new_method()  # 输出: This is a new method

        总之, vars() 是一个非常有用的 Python 内置函数,可以帮助您更好地了解和操作对象的属性。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值