Class 中的 NameError 在其他 Class 中
NameError in a Class Within a Other Class
在这个程序中,我试图创建一个名为 Human 的 class,其中有 classes 代表人类的不同属性:
class Human:
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
class Ginetics:
def __init__(self, spawnCoordinates, parentM, parentF, isMale):
self.spawnCoordinates = coordinates
self.parentM = parentM
self.parentF = parentF
self.isMale = isMale
self.kids = [[]]
class General:
def __init__(self, birthday):
self.birthday = birthday
def __init__(self, spawnCoordinates, parentM, parentF, isMale, birthday):
self.Health = Health()
self.Genetics = Genetics(spawnCoordinates, parentM, parentF, isMale)
self.General = General(birthday)
但是当我运行这个...
hum1 = Human((500,500), "Dan", "Lisa", True, 120)
它给我这个错误:
NameError: name 'Health' is not defined
Health
等人。不是全局变量;它们是 class 属性。你必须写 self.Health = Human.Health()
.
但是,嵌套的 classes 通常不用于 Python。 意图 可能仅将 Health
与 Human
的实例一起使用,但其定义与 Human
没有任何内在联系。只需全局声明即可:
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
...
class Human:
def __init__(self, ...):
self.health = Health()
...
将您的 类 分开而不是嵌套它们,这样做没有任何好处,而且会降低您的代码的可读性。
class Human:
def __init__(self, spawnCoordinates, parentM, parentF, isMale, birthday):
self.Health = Health()
self.Genetics = Genetics(spawnCoordinates, parentM, parentF, isMale)
self.General = General(birthday)
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
class Genetics:
def __init__(self, spawnCoordinates, parentM, parentF, isMale):
self.spawnCoordinates = spawnCoordinates
self.parentM = parentM
self.parentF = parentF
self.isMale = isMale
self.kids = [[]]
class General:
def __init__(self, birthday):
self.birthday = birthday
hum = Human((500, 500), "Dan", "Lisa", True, 120)
print(hum.General.birthday)
输出:
120
在这个程序中,我试图创建一个名为 Human 的 class,其中有 classes 代表人类的不同属性:
class Human:
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
class Ginetics:
def __init__(self, spawnCoordinates, parentM, parentF, isMale):
self.spawnCoordinates = coordinates
self.parentM = parentM
self.parentF = parentF
self.isMale = isMale
self.kids = [[]]
class General:
def __init__(self, birthday):
self.birthday = birthday
def __init__(self, spawnCoordinates, parentM, parentF, isMale, birthday):
self.Health = Health()
self.Genetics = Genetics(spawnCoordinates, parentM, parentF, isMale)
self.General = General(birthday)
但是当我运行这个...
hum1 = Human((500,500), "Dan", "Lisa", True, 120)
它给我这个错误:
NameError: name 'Health' is not defined
Health
等人。不是全局变量;它们是 class 属性。你必须写 self.Health = Human.Health()
.
但是,嵌套的 classes 通常不用于 Python。 意图 可能仅将 Health
与 Human
的实例一起使用,但其定义与 Human
没有任何内在联系。只需全局声明即可:
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
...
class Human:
def __init__(self, ...):
self.health = Health()
...
将您的 类 分开而不是嵌套它们,这样做没有任何好处,而且会降低您的代码的可读性。
class Human:
def __init__(self, spawnCoordinates, parentM, parentF, isMale, birthday):
self.Health = Health()
self.Genetics = Genetics(spawnCoordinates, parentM, parentF, isMale)
self.General = General(birthday)
class Health:
def __init__(self):
self.thirst = 24
self.hunger = 36
self.howSleepy = 48
class Genetics:
def __init__(self, spawnCoordinates, parentM, parentF, isMale):
self.spawnCoordinates = spawnCoordinates
self.parentM = parentM
self.parentF = parentF
self.isMale = isMale
self.kids = [[]]
class General:
def __init__(self, birthday):
self.birthday = birthday
hum = Human((500, 500), "Dan", "Lisa", True, 120)
print(hum.General.birthday)
输出:
120