私有变量和类本地引用

时间:2016-07-27 07:43:27

标签: python class reference local private

我不是英语母语,我在https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

学习python

在第9.6节“私人变量和类别 - 地方参考”中,最后一段说明:

  

请注意,传递给exec,eval()或execfile()的代码不会   将调用类的类名视为当前类;   这类似于全局声明的效果,效果   它同样限于一起进行字节编译的代码。   同样的限制适用于getattr(),setattr()和delattr(),如   以及直接引用 dict 时。

它对该文本一无所知。请解释或给我一些例子来证明这个想法。

2 个答案:

答案 0 :(得分:3)

想象一下,你有一个私人会员的班级:

class Foo:
    __attr= 5

在课程中,此属性可以引用为__attr

class Foo:
    __attr= 5
    print(__attr) # prints 5

但不在课堂之外:

print(Foo.__attr) # raises AttributeError

但如果您在课程中使用evalexecexecfile,情况会有所不同:

class Foo:
    __attr= 5

    print(__attr) # prints 5
    exec 'print(__attr)' # raises NameError

您引用的段落对此进行了解释。 exec不认为Foo是"当前类",因此无法引用私有属性(除非您将其引用为Foo._Foo__attr)。

答案 1 :(得分:0)

Foo类: Foo._Foo__attr = 5

class X extends Base {
  override def run[CommandResult]: Future[CommandResult] = {
      // here return CommandResult, Success or Failure
  }
}

sealed abstract class CommandResult(val exitCode: Int)

object CommandResult {
  case object Success extends CommandResult(0)
  case object Failure extends CommandResult(1)
}