我需要一个名为None
的变量:
class QAbstractPrintDialog(QDialog):
None = int() # QAbstractPrintDialog.PrintDialogOption enum
PrintToFile = int() # QAbstractPrintDialog.PrintDialogOption enum
PrintSelection = int() # QAbstractPrintDialog.PrintDialogOption enum
...
可是:
语法错误:无法分配给无
我需要名称为None
。我认为这会奏效:
QAbstractPrintDialog.None = int() # QAbstractPrintDialog.PrintDialogOption enum
但事实并非如此。有没有解决方法没有语法错误? 像setattr这样的解决方案对我不起作用 - 这个代码将被解析以提取类,函数,参数等。
Python 2.6,2.7
修改
我正在帮助一个人编写包含Qt类描述的伪Python模块。 QAbstractPrintDialog
是其中一个类,它有enum QAbstractPrintDialog::PrintDialogOption
(http://doc.trolltech.com/latest/qabstractprintdialog.html)。其中一个枚举是None。我可以通过None
轻松引用QAbstractPrintDialog.None
属性,但我无法设置它。 int()
表示属性的类型。
见这里:http://scummos.blogspot.com/2011/06/kdevelop-python-language-support-plugin.html
答案 0 :(得分:8)
在python None
中是保留字,不能用作变量名。
引用python文档:
在版本2.4中更改:分配给None是非法的并引发SyntaxError。
答案 1 :(得分:3)
你做不到。 None
是Python内置常量。
做你所做的事情没有比:
更有意义了class = struct
“
None
的分配是非法的,并提出SyntaxError
。” - The documentation
选择另一个变量名称:nil
,none
,nothing
,zilch
,not_a_sausage
,no_votes
,zero
, ...
我同意你的意见,这与其他内置常量有点不一致, viz :
>>> class Foo:
... def __init__(self):
... self.False = True
... self.True = False
... self.None = 'Something'
...
File "<stdin>", line 5
SyntaxError: assignment to None
......但是......
>>> class Foo:
... def __init__(self):
... self.False = True
... self.True = False
...
>>> f = Foo()
>>> f.True
False
>>> f.False
True
>>> f.None
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Foo instance has no attribute 'None'
......当然,这种命名和任务只会导致麻烦!
答案 2 :(得分:3)
将其称为与__INSTEADOF_None不同的内容,然后在解析前的预处理步骤中删除所有“_ INSTEADOF ”实例。
答案 3 :(得分:1)
分配给None
的规则在Python中具有非常特殊的含义。选择其他名称。
答案 4 :(得分:1)
您可以尝试下一种方法:
>>> class A():pass
>>> a = A()
>>> a.None = 2
SyntaxError: assignment to None
>>> a.__dict__['None'] = 2
>>> a.None
2
>>> dir(a)
['None', '__doc__', '__module__']
但是仍然 - 使用None
作为对象字段的想法非常糟糕。