Python 另一个类中的一个类中的NameError

Python 另一个类中的一个类中的NameError,python,class,nameerror,Python,Class,Nameerror,在这个程序中,我试图创建一个名为Human的类,其中的类表示人的不同属性: class Human: class Health: def __init__(self): self.thirst = 24 self.hunger = 36 self.howSleepy = 48 class Ginetics:

在这个程序中,我试图创建一个名为Human的类,其中的类表示人的不同属性:

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

健康
等不是全局变量;它们是类属性。您必须编写
self.Health=Human.Health()

但是,Python中通常不使用嵌套类。其目的可能是仅将
健康
用于
人类
的实例,但其定义与
人类
没有内在联系。只需在全球范围内宣布:

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.Health()
而不是
Health()
您需要先访问外部类才能访问内部类,请查看本教程,它解释了所有内容: