获取类变量和值的字典
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# - 字典 - 如何在字典中获取特定类值的最大值? [复制]
如何使用变量创建具有索引和值的 Javascript 对象?
使用循环从 plist 的根级别获取字典数组并将其放入变量中