我正忙着学习如何更好地使用它们的课程和词典。我提出的想法是创建一堆类,为一些对象提供了一堆不同的描述符,我使用了来自D& amp;的怪物。 D,然后创建一个包含所有这些怪物的字典,这样我就可以使用字典中的键从类中加载描述符。
import dice #a dice module i made
import textwrap
class Goblin(object):
def __init__(self):
self.name = 'Goblin'
self.desc = 'bla bla bla, I'm not going to type the whole thing.'
self.health = dice.d8.roll(1) + 1
def describe(self):
print self.name
print self.health, 'other random info not in self.desc'
print textwrap.fill(self.desc, 60)
goblin = Goblin()
所以这是我的课程设置。当我输入print goblin.describe()时一切正常。然后我设置了我的字典:
bestiary = {
'Goblin': goblin.describe()
}
我删除了goblin.describe(),所以没有命令告诉程序打印任何东西,但是当我运行程序时,它运行goblin.describe()并显示描述我的妖精的文本块。我的问题是为什么它会这样做,有没有办法让它不这样做,所以我可以独立使用goblin.describe()或any_other_monster_I make.describe()并让它拉出描述?
我知道可能有更简单的方法可以做到这一点,但我只是想弄明白为什么这样做。
答案 0 :(得分:3)
嗯,你实际上正在评估这里的描述(称之为)
bestiary = {
'Goblin': goblin.describe()
}
您可以尝试返回字符串而不是仅仅打印它:
import dice #a dice module i made
import textwrap
class Goblin(object):
def __init__(self):
self.name = 'Goblin'
self.desc = 'bla bla bla, I''m not going to type the whole thing.'
self.health = dice.d8.roll(1) + 1
def describe(self):
return self.name + " " + self.health + " " + 'other random info not in self.desc ' \
+ 'other random info not in self.desc ' + textwrap.fill(self.desc, 60)
goblin = Goblin()
bestiary = {
'Goblin': goblin.describe()
}
答案 1 :(得分:0)
基于“当我投入印刷goblin.describe()时,一切正常。”我想你想要这样的东西:
def describe(self):
result = ""
result += self.name
result += str(self.health) + ' other random info not in self.desc'
result += textwrap.fill(self.desc, 60)
return result
即。从describe()返回描述,不要在方法内打印。
答案 2 :(得分:0)
我知道可能有更简单的方法来做到这一点,但我只是想弄清楚它为什么会这样做。
采取这样的方式:
def bla():
print("bla")
def alb():
return("alb")
bbb = bla()
aaa = alb() #this could be anthing not just "aaa= alb()" it could be something like thing_dict = {'thing': alb() }
bla
功能将打印“bla”。打印是一种简单的说法:“它是标准输出,很可能是你的控制台”这个打印在bla
返回之前发生,所以它只是打印然后返回none
(因为你并没有告诉它返回任何东西)(除非另有说明,否则所有功能都没有退货)
bla()
可以重写为
def bla():
print("bla")
return None
它会做同样的事情。
alb
函数返回“alb”,因为您明确告诉它。
如果您执行type(bbb)
,则会NoneType
因为bla()
没有返回任何内容
如果您执行type(aaa)
,您将获得str
,因为alb()
函数返回了“alb”
如果您执行print(bbb)
,您将获得None
,因为这是bla()
返回的内容(您未定义退货,因此返回None
)
如果你print(aaa)
,你会得到“alb”,因为你告诉alb()
要返回
答案 3 :(得分:0)
我不确定我是否完全按照你要做的。我真的不明白你的意思是“删除了goblin.describe()”。你是说你是从dict中删除它,还是从课堂上删除了这个方法?在任何一种情况下,也许一些缓存?删除工作目录中的任何.pyc文件,然后重试。
或者您可能正在尝试将该方法添加到字典中,以便稍后可以调用describe?你可以添加方法,而不是调用它(记住,在python中,所有东西,包括方法,都是对象)。因此,您可以完美地做到:
goblin = Goblin()
bestiary = { 'Goblin' : goblin.describe }
# and later call 'describe' as follows
bestiary['Goblin']()
# though personally I'd opt for the following which is more legible
goblin = Goblin()
bestiary = { 'Goblin' : goblin }
bestiary['Goblin'].describe()