【发布时间】:2015-12-22 02:28:11
【问题描述】:
在 python 3 中,我发现 class 属性可以用作__init__() 函数中的参数,如下所示:
文件 test.py:
class Foo:
var1 = 23333
def __init__(self, var=var1):
self.var = var
在cmd中运行:
C:\Users\rikka\Desktop>py -3 -i test.py
>>> f1=Foo()
>>> f1.var
23333
但是通过使用dot.expression,在初始化这个类时,解释器会报错:
文件 test2.py:
class Foo:
var1 = 23333
def __init__(self, var=Foo.var1):
self.var = var
在cmd中运行:
C:\Users\rikka\Desktop>py -3 -i test2.py
Traceback (most recent call last):
File "test2.py", line 1, in <module>
class Foo:
File "test2.py", line 3, in Foo
def __init__(self, var=Foo.var1):
NameError: name 'Foo' is not defined
我只是不知道为什么解释器找不到名称“Foo”,因为 Foo 是环境中全局框架中的名称。是否有一些我不完全理解的关于 python 类的范围相关概念?
【问题讨论】:
-
请发布您实际获得的内容,无需手动编辑。带有
>>>提示符的第二个代码示例看起来像是交互式 Python 会话的一部分,但回溯来自执行脚本。如果您以交互方式尝试过这段代码,您会发现是类定义引发了异常,而不是构造对象的调用。 -
@Duncan 感谢您的建议!
标签: python class constructor arguments class-attributes