编写一个将类映射到简单表视图的GUI库时,我遇到了这个问题.某个类型=列的每个类成员以及列的顺序都很重要.但...
class Person(object):
name = None
date_of_birth = None
nationality = None
gender = None
address = None
comment = None
for member in Person.__dict__.iteritems():
if not member[1]:
print member[0]
Run Code Online (Sandbox Code Playgroud)
输出:
comment
date_of_birth
name
address
gender
nationality
...
Run Code Online (Sandbox Code Playgroud)
呃,奥得河搞得一团糟......想要的输出:
name
date_of_birth
nationality
gender
address
comment
Run Code Online (Sandbox Code Playgroud)
有没有办法在不保留额外OrderedDict()
列的情况下完成?
在Python3中,可以通过使用PEP3115来允许您在构造类时覆盖元类中的dict类型(例如,使用跟踪插入顺序的OrderedDict).以下是此方法的实现:
class OrderedMeta(type):
@classmethod
def __prepare__(metacls, name, bases):
return OrderedDict()
def __new__(cls, name, bases, clsdict):
c = type.__new__(cls, name, bases, clsdict)
c._orderedKeys = clsdict.keys()
return c
class Person(metaclass=OrderedMeta):
name = None
date_of_birth = None
nationality = None
gender = None
address = None
comment = None
for member in Person._orderedKeys:
if not getattr(Person, member):
print(member)
Run Code Online (Sandbox Code Playgroud)
在Python2中,它更加棘手.它可以用一些相当粗暴的东西来实现,比如内省源代码,并从AST中确定定义顺序,但这可能比它的价值更麻烦.
归档时间: |
|
查看次数: |
3713 次 |
最近记录: |