对不起,可能是愚蠢的问题,但找不到答案。上下文是我对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)
答案 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类型用作变量名称,换句话说,请勿使用str
或int
作为变量名称。称他们为别的东西。
答案 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