获取类变量和值的字典

Posted

技术标签:

【中文标题】获取类变量和值的字典【英文标题】:getting a dictionary of class variables and values 【发布时间】:2014-02-14 19:57:32 【问题描述】:

我正在研究一种将所有类变量作为键和值作为字典的值返回的方法,例如我有:

first.py

class A:
    a = 3
    b = 5
    c = 6

然后在 second.py 中,我应该能够调用一个方法或返回这样一个字典的东西

import first

dict = first.return_class_variables()
dict

那么 dict 会是这样的:

'a' : 3, 'b' : 5, 'c' : 6

这只是解释这个想法的一个场景,当然我不希望它那么容易,但是如果有关于如何处理这个问题的想法,就像 dict可用于设置类变量值,方法是将变量、值组合作为键、值的字典传递给它。

【问题讨论】:

不清楚你在问什么,你所说的“类变量”是什么意思? 类属性,下面的答案就是我要找的。:) k,请记住,它还将包含类的方法,并且不会为您提供在父类中定义的任何属性。 是的,我正在处理的类只包含属性没有方法,谢谢,我会记住这一点 【参考方案1】:

你需要过滤掉函数和内置的类属性。

>>> class A:
...     a = 3
...     b = 5
...     c = 6
... 
>>> key:value for key, value in A.__dict__.items() if not key.startswith('__') and not callable(key)
'a': 3, 'c': 6, 'b': 5

【讨论】:

小修正:我认为应该是...and not callable(value).【参考方案2】:

这样的?

  class A(object):
      def __init__(self):
          self.a = 3
          self.b = 5
          self.c = 6

  def return_class_variables(A):
      return(A.__dict__)


  if __name__ == "__main__":
      a = A()
      print(return_class_variables(a))

给了

'a': 3, 'c': 6, 'b': 5

【讨论】:

我建议重命名该类...以增加关于 return_class_variables() 方法的清晰度。 您正在设置和返回实例变量,而不是类变量。类变量不在__init__() 中定义,而是在class 语句之后定义。类变量对所有实例都是通用的,而实例变量只属于实例(Class 对象不能访问实例变量,尽管相反是可能的)。【参考方案3】:

A.__dict__ 使用字典推导并过滤掉以__ 开头和结尾的键:

>>> class A:
        a = 3
        b = 5
        c = 6
...     
>>> k:v for k, v in A.__dict__.items() if not (k.startswith('__')
                                                             and k.endswith('__'))
'a': 3, 'c': 6, 'b': 5

【讨论】:

【参考方案4】:

最好的解决方案和最pythonic是使用var(class_object)var(self)(如果尝试在类内使用)。

这虽然确实避免了键是另一个对象而不是默认 python 类型的字典对。

>>> class TheClass():
>>>    def __init__(self):
>>>        self.a = 2
>>>        self.b = 1
>>>        print(vars(self))
>>> class_object= TheClass()
'a'=2, 'b'=1

或课外

>>> vars(class_object)
'a': 2, 'b': 1

【讨论】:

以上是关于获取类变量和值的字典的主要内容,如果未能解决你的问题,请参考以下文章

C# - 字典 - 如何在字典中获取特定类值的最大值? [复制]

python中判断变量类型的函数

如何使用变量创建具有索引和值的 Javascript 对象?

使用循环从 plist 的根级别获取字典数组并将其放入变量中

Javascript:在嵌套字典中添加键/值对;键和值是变量

Python把类当做字典来访问