在另一个类中的一个类中出现NameError

2024-10-05 12:13:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个程序中,我试图创建一个名为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

Tags: self程序属性initdefclassgeneralbirthday
2条回答

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

但是,嵌套类通常不在Python中使用。意图可能只是将HealthHuman的实例一起使用,但它的定义与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

相关问题 更多 >

    热门问题