【发布时间】:2017-05-29 00:02:48
【问题描述】:
我知道你们中的大多数人都留下来不应该使用 exec,但我有一些问题。
这是一个最小的例子,它有效:
class A:
def __init__(self):
exec('self.a = self.funct()')
def funct(self):
return 1
def ret(self):
return self.a
> obj = A()
> obj.ret()
1
但是,当我这样做时:
class A:
def __init__(self):
exec('self.a = self.__funct()')
def __funct(self):
return 1
def ret(self):
return self.a
> obj = A()
AttributeError: 'A' has no attribute '__funct'
有人知道为什么会有这种差异吗?
【问题讨论】:
-
请注意,
__名称是 class 私有的。这与其他语言的隐私模型不同。