【问题标题】:NameError in a Class Within a Other Class [duplicate]其他类中的类中的NameError [重复]
【发布时间】:2023-03-28 05:46:01
【问题描述】:

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

【问题讨论】:

标签: python class nameerror


【解决方案1】:

分离你的类而不是嵌套它们,这样做没有任何好处,而且会降低你的代码的可读性。

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

【讨论】:

    【解决方案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()
            ...    
    

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2019-01-24
      相关资源
      最近更新 更多