如何将 return class 变量作为字典?

How to return class variable as a dict?

我正在尝试在我的 class 中编写一个方法并尝试 return 作为 dict

class Test(object):
    location = 'Dhaka'

    @classmethod
    def get_items(cls):
        items = dict()

        for item in cls:
            items[item.name] = item.value

        return items


class NewTest(Test):
    lat = 4444

我正在尝试获得以下结果:

print(NewTest.get_items())
{'location': 'Dhaka', 'lat': 4444}

但是return无法迭代此类错误。

class不能迭代;不过,它的 __dict__ 属性可以。

@classmethod
def get_items(cls):
    items = dict()

    # Loop defined enums
    for item in cls.__dict__:
        if item == "__module__":
            continue
        items[item] = cls.__dict__[item]

    # return in tuple
    return items

您需要对字典的键进行一些过滤,因为 class 除了您创建的属性之外可能还有其他属性。

你可以查看将dir()应用到class的内容来获取它的所有属性,但是在查找class时需要一些方法来过滤掉具有特殊名称的东西变量。一种相当快速的方法是使用正则表达式模式匹配来识别它们。您还需要像 get_items() class 方法那样过滤掉 可调用值

如下图所示。

import re

DUNDER = re.compile(r'^__[^\d\W]\w*__\Z', re.UNICODE)  # Special method names.


class Test(object):
    location = 'Dhaka'

    @classmethod
    def get_items(cls):
        is_special = DUNDER.match  # Local var to speed access.
        items = {}

        for name in dir(cls):
            if not is_special(name):
                value = getattr(cls, name)
                if not callable(value):
                    items[name] = value

        return items


class NewTest(Test):
    lat = 4444


print(NewTest.get_items())  # -> {'lat': 4444, 'location': 'Dhaka'}