变量名称为“无”

时间:2011-07-03 06:40:49

标签: python

我需要一个名为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

5 个答案:

答案 0 :(得分:8)

在python None中是保留字,不能用作变量名。 引用python文档:

  

在版本2.4中更改:分配给None是非法的并引发SyntaxError。

答案 1 :(得分:3)

你做不到。 None是Python内置常量。

做你所做的事情没有比:

更有意义了
class = struct
  

None的分配是非法的,并提出SyntaxError。”    - The documentation

选择另一个变量名称:nilnonenothingzilchnot_a_sausageno_voteszero...

我同意你的意见,这与其他内置常量有点不一致, 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作为对象字段的想法非常糟糕。