Python class 个实例是重复属性
Python class instances are duplicating attributes
对 OOP 来说相对较新,只是在尝试为游戏制作 NPC class,该游戏应根据随机值生成不同的 NPC 实例,除非另有说明。真的只是概念验证。
然而,年龄、性别和种族属性由于某种原因而重复,即使它们是由应该 return 随机值的函数生成的。
我已经单独测试了这些功能,它们正在做它们应该做的事情,并不复杂。
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
这是我的 class 定义以及我在使用时遇到问题的函数。名称和高度函数以及 the__str__ 方法似乎没问题,所以我没有包括它们。如您所见,性别、年龄和种族是重复的。为什么会这样?可以使用函数初始化 class 个对象吗?
输出:
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
这是 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
对 OOP 来说相对较新,只是在尝试为游戏制作 NPC class,该游戏应根据随机值生成不同的 NPC 实例,除非另有说明。真的只是概念验证。
然而,年龄、性别和种族属性由于某种原因而重复,即使它们是由应该 return 随机值的函数生成的。
我已经单独测试了这些功能,它们正在做它们应该做的事情,并不复杂。
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
这是我的 class 定义以及我在使用时遇到问题的函数。名称和高度函数以及 the__str__ 方法似乎没问题,所以我没有包括它们。如您所见,性别、年龄和种族是重复的。为什么会这样?可以使用函数初始化 class 个对象吗?
输出:
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
这是 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