【问题标题】:python using inner class as a static class variable weird behavior [duplicate]python使用内部类作为静态类变量奇怪的行为[重复]
【发布时间】:2020-12-24 21:48:13
【问题描述】:

背景:我一直在尝试通过将全局变量转换为静态类变量、将方法转换为类方法......等将整个 python 文件包装在另一个文件的类中。python 文件本身有一个类,并且具有该类的全局实例化,这意味着该类现在是一个内部类,我将需要该内部类类型的静态类变量。 [如果您有更好的方法将整个 python 文件作为类包含在其他 python 文件中而不使用模块(我需要将所有代码严格放在一个文件中),请告诉我。尽管如此,我很想知道下面有什么问题]

我已经能够将我的问题减少到以下几点:

class ok:
    class he: 
        def __init__(self):
            self.x=1
    she=[he() for i in range(3)]

将导致:'name 'he' is not defined' 但是这可行:

class ok:
    class he: 
        def __init__(self):
            self.x=1
    she=[]
    for i in range(3):
        she.append(he())

据我所知,两种代码的结果相同,那么为什么一种合法而另一种不合法呢?

【问题讨论】:

    标签: python python-3.x inner-classes


    【解决方案1】:

    我发现了一个更简单的案例来重现您的问题: 问题在于,在第一种情况下,列表推导它会查找列表推导的局部变量 toto ,该变量不存在(而类属性 toto 确实存在)。
    然而,在第二种情况下,没有列表理解,因此它会查找任何名为 toto 的变量并找到类属性 toto。
    所以问题来自列表理解,与内部类无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2011-03-14
      • 1970-01-01
      • 2016-05-16
      • 2013-04-07
      • 2018-08-06
      • 1970-01-01
      相关资源
      最近更新 更多