如何将 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'}
我正在尝试在我的 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'}