【问题标题】:What is the purpose of the python builtin vars() function? [duplicate]python 内置 vars() 函数的目的是什么? [复制]
【发布时间】:2019-01-04 22:44:20
【问题描述】:

我发现关于 vars() 函数的文档有点神秘:https://docs.python.org/3/library/functions.html#vars

拥有这个功能有什么意义?为什么不直接调用x.__dict__ 而不是vars(x)locals()

有人能给出这个函数的用例吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    拥有vars()函数的要点是:

    • 您无需直接从外部触摸类__dict__ dunder 函数

    大部分__dunders__都一样:

    next()  => __next__  
    >=      => __ge__
    <=      => __le__
    str()   => __str__
    repr()  => __repr__
    

    见:Python datamodel __lt__ etc.

    另见:Should I ever directly call object.__str__()?

    【讨论】:

    • 它专注于更具可读性和简洁的代码对吧?
    • @prashantrana 和封装。 “正常”方法可以具有直接调用 dunder 所没有的逻辑
    • @PatrickArtner 你能举一个这种逻辑的例子吗?这里好像 vars() 没有任何额外的逻辑?
    • @AllenWang wait for python 3.7 / 3.8 ...也许它会拥有它-也许会引入其他一些笨拙的东西,我也通过next()检查作为后备-如果你不能直接__dict__你不会得到那个附加的功能
    【解决方案2】:

    python内置vars(object)函数返回括号内对象的__dict__属性;如果不适用,它会给出TypeError 异常。它应该用于查看字典。

    当你运行时:

    # Python program to illustrate 
    # working of vars() method in Python 
    
    class Example: 
    def __init__(self, name1 = "Bob", num2 = 100, name3 = "Bill"): 
        self.name1 = name1 
        self.num2 = num2 
        self.name3 = name3 
    
    exampleVariable = Example()
    print(vars(exampleVariable)) 
    

    输出是:

    {'num2': 100, 'name1': 'Bob', 'name3': 'Bill'}
    

    【讨论】:

    • 我觉得使用 vars(x) 比其他可以做同样事情的解决方案更值得信赖和可靠。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2020-06-04
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多