【发布时间】:2016-10-02 03:37:06
【问题描述】:
假设我有以下课程:
class Foo(object):
def __init__(self, value):
self.d = value
self.a = value
self.s = value
self.k = value
我要按申报顺序retrieve the instance variables。
我尝试使用vars() 没有任何成功:
list(vars(Foo('value')).keys())
# ['a', 'k', 's', 'd']
我想要什么:
list(magic_method(Foo('value')).keys())
# ['d', 'a', 's', 'k']
编辑:
显然,每个字段都会有不同的值。
我的目标是通过对象变量生成 XML。为了有效,XML 标签的顺序必须正确。
结合__iter__ 覆盖,我只需管理对象字典即可生成我的 XML。
我们以图书馆为例。假设你有一个班级Book、Date、Person、Author 和Borrower:
class Book(object):
def self.__init__()
self._borrower = Borrower()
self._author = Author()
class Date(object)
def __init__(self, date):
self._date = date
class Person(object):
def __init__(self, name):
self._name = name
class Author(object):
def __init__(self):
self._person = Person("Daniel")
class Borrower(object):
def __init__(self):
self._person = Person("Jack")
self._date = Date("2016-06-02")
我想创建以下 XML:
<Book>
<Borrower>
<Person>Jack</Person>
<Date>2016-06-02</Date>
</Borrower>
<Author>
<Person>Daniel</Person>
</Author>
</Book>
我知道这些类可能看起来很奇怪(比如这里的 Date),但我想让问题尽可能简单(并且有些字段非常有意义)。在实践中,我会查询数据库并可能在初始化程序中传递一个记录标识符。关键是有些数据遵循相同的语法(即此处的 Person)。
总而言之,我想使用 Python 对象创建这样的 XML。订购事项。这就是为什么我想为此目的按顺序检索变量:然后我可以提取类并生成 XML 标记。
【问题讨论】:
-
我不相信这是可能的,因为字典不保持秩序。
-
@JonathonReinhart:元类是可能的。
-
...
keys().sorted(key=lambda x: mapdict[x])? -
@AlexHall:查看我的编辑。 :)
-
@tripleee:除非我弄错了,
list(vars(Foo('value')).keys().sorted(key=lambda x: mapdict[x]))会产生以下错误:AttributeError: 'list' object has no attribute 'sorted'。你能说得更清楚些吗?
标签: python