我不是英语母语,我在https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references
学习python在第9.6节“私人变量和类别 - 地方参考”中,最后一段说明:
请注意,传递给exec,eval()或execfile()的代码不会 将调用类的类名视为当前类; 这类似于全局声明的效果,效果 它同样限于一起进行字节编译的代码。 同样的限制适用于getattr(),setattr()和delattr(),如 以及直接引用 dict 时。
它对该文本一无所知。请解释或给我一些例子来证明这个想法。
答案 0 :(得分:3)
想象一下,你有一个私人会员的班级:
class Foo:
__attr= 5
在课程中,此属性可以引用为__attr
:
class Foo:
__attr= 5
print(__attr) # prints 5
但不在课堂之外:
print(Foo.__attr) # raises AttributeError
但如果您在课程中使用eval
,exec
或execfile
,情况会有所不同:
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)
}