对OOP来说相对较新,只是试图为游戏制作NPC类,除非另有说明,否则应根据随机值生成不同的NPC实例。只是概念证明。
然而,年龄,性别和种族属性由于某种原因而重复,即使它们是由应该返回随机值的函数生成的。
我已经单独测试了这些功能,他们正在做他们应该做的事情而且并不复杂。
class NPC:
def __init__(self, gender = rand_gender(), race = rand_race(),
age = rand(16, 70),name = "", height = 0):
self.gender = gender
self.race = race
self.age = age
if name == "":
self.name = name_gen(self.gender)
else: self.name = name
if height == 0:
self.height = height_gen(self.race)
else: self.height = height
def rand(min, max):
return random.randrange(min, max)
def rand_gender():
genders = ["Male", "Female"]
random.shuffle(genders)
return genders[0]
def rand_race():
races = ["Human", "Dwarf", "Elf", "Orc"]
random.shuffle(races)
return races[0]
npc1 = NPC()
npc2 = NPC()
npc3 = NPC()
hero = NPC("Female","Human", 26, "Hero")
print npc1
print npc2
print npc3
print hero
print npc1 == npc2
这是我的课程定义及其使用的功能,我遇到了麻烦。名称和高度函数以及_str__方法似乎没问题,所以我还没有把它们包括在内。正如您所看到的,性别,年龄和种族都是重复的。为什么会这样?你能用函数来初始化类对象吗?
输出:
Name: Jane Gender: Female Age:32 Race: Elf Height: 6.4
Name: Wilma Gender: Female Age:32 Race: Elf Height: 6.7
Name: Jane Gender: Female Age:32 Race: Elf Height: 6.5
Name: Hero Gender: Female Age:26 Race: Human Height: 5.7
False
答案 0 :(得分:5)
这是一个非常常见的python问题。函数定义(在这种情况下使用命名参数)只运行一次!因此,所有默认值都只设置一次。
class NPC:
def __init__(self, gender = rand_gender(), race = rand_race(),
age = rand(16, 70),name = "", height = 0): # run only once
尝试做类似
的事情class NPC:
def __init__(self, gender = None, ...):
if gender is None:
gender = rand_gender()
# init the rest
根据建议,这里是even more gotchas