python:打印__dict__:是否可以按照与班级中列出的顺序打印?

时间:2014-01-20 02:15:46

标签: python sorting dictionary

对不起,可能是愚蠢的问题,但找不到答案。上下文是我对python的新手并做了一个简单的RPG。 Class将具有一些基本的RPG属性,如

class Character(Card):
    def __init__(self, str, dex, con, int, wis, char):
        self.str = str
        self.dex = dex
        self.con = con
        self.int = int
        self.wis = wis
        self.char = char

由于我将根据字符类分配值,因此我想制作一个通用的调试方法,以便稍后为给定的类打印出来。我的问题是:是否有一种简单的方法可以在以后打印出这些(str,dex,con ...)。

我要用基本的

def printClass(self):
    attrs = an.__dict__
    print ', ' '\n'.join("%s: %s" % item for item in attrs.items()) 

以现在特定的顺序打印出来 dex:2, int:4, char:6, wis:5, str:1, con:3

但是如果我忽略了一些事情以保持秩序,我会喜欢帮助/建议

*编辑:为了澄清我是否制作了流氓=字符(1,2,3,4,5,6),我想打印出rogue.str,rogue.dex(按照类中列出的顺序:str ,dex,con,int,wis,char)

3 个答案:

答案 0 :(得分:4)

我不确定我是否理解这个问题,但这是另一种选择。正如你所说,你想要一个通用的调试方法,我想你想要打印属性及其值。因此,处理此问题的一种可能方法是为类Character实现__str__(self)方法

class Character(object): # Changed this since I don't know how class 'Card' looks like
    def __init__(self, str, dex, con, int, wis, char):
        self.str = str
        self.dex = dex
        self.con = con
        self.int = int
        self.wis = wis
        self.char = char

    def __str__(self):
        return "str: {}, dex: {}, con: {}, int: {}, wis: {}, char: {}".format(self.str, self.dex, self.con, self.int, self.wis, self.char)

# Testing
list_of_characters = [Character(1, 2, 3, 4, 5, "A"), Character(9, 8, 7, 6, 5, "B")]

for e in list_of_characters:
    print e

<强>输出:

str: 1, dex: 2, con: 3, int: 4, wis: 5, char: A
str: 9, dex: 8, con: 7, int: 6, wis: 5, char: B

修改

请注意,不得将Python类型用作变量名称,换句话说,请勿使用strint作为变量名称。称他们为别的东西。

答案 1 :(得分:2)

尝试将订单作为列表,然后按顺序打印出来:

def printClass(self, order):
    attrs = an.__dict__
    for i in order:
        print attrs[i]

订单可以是['foo', 'bar'] ...

您可以为每个类定义顺序,然后只使用an.order而不是订单

答案 2 :(得分:1)

Python dict不保留顺序。所以简短的答案是否定的,你不能按顺序打印你的属性字典。但是,它可能会有所帮助,您可以在打印前对键进行排序:

def printClass(self):
    attrs = an.__dict__
    print ', ' '\n'.join("%s: %s" % item for item in sorted(attrs.items(), key=lambda i: i[0])) 

它将打印:char:6,con:3,dex:2,int:4,str:1,wis:5