【问题标题】:name 'self' is not defined and how to ask for it outside of __init__名称“自我”未定义以及如何在 __init__ 之外请求它
【发布时间】:2018-06-08 09:09:22
【问题描述】:

有一些关于自我的问题,但我无法在任何地方找到一个很好且易于理解的解释为什么我不能这样做以及我应该如何正确地做到这一点。这种处理方式对我和许多其他开始使用 python 的人来说是非常违反直觉的。示例:

class cls:
    def __init__(self):
        self.a = True

    if self.a:
        print("self.a is True")
    else:
        print("self.a if False")

我不知道如何在类的 init 之外访问或检查“a”。如果我会做这样的事情:

class cls:
    def __init__(self):
        self.a = True

    if a:
        print("a is True")
    else:
        print("a if False")

然后我得到 NameError。在某些时候,我总是遇到这个问题,我不明白如何正确处理这个问题。我应该在课外用函数做这个吗?在这种情况下,无论您尝试什么都应该有意义。另一个例子:

class cls:
    def __init__(self):
        self.a = True

    if cls.a:
        print("self.a is True")
    else:
        print("self.a if False")

给出 IndentationError:意外缩进。

【问题讨论】:

  • 您在网站上看到的缩进(尤其是第 5-8 行)是否与您在编辑器中看到的一样?
  • 您拥有的if 语句属于另一个函数!你不能让它挂在一个方法之外,因为你已经把它放在了一个类中。
  • 在方法之外,您只是在类定义中 - 当您还没有完成定义要实例化的类时,不可能有实例 self!您实际上期望在这里发生什么?
  • 您希望何时执行此 if 语句?

标签: python python-3.x python-2.7 class self


【解决方案1】:

看来您只需要将代码包装在如下函数中:

class myClass():
    def __init__(self):
        self.a = True

    def check_a(self):
        if self.a:
            print('a is True')
        else:
            print('a is not True')

然后像这样使用:

inst = myClass()
inst.check_a()

这将做你所期望的,打印:'a is True'

希望能把事情弄清楚一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-10-23
    相关资源
    最近更新 更多