在 Python 中的类名中使用空格

Ras*_*usN 6 python namespaces class python-2.7

在 python 中创建类的正常方法不允许类名中有空格。

>>> class Foo Bar(object):
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但是,使用内置的type()函数,我们可以创建一个名称中包含空格的类:

>>> C = type('Foo Bar', (object,),{})
>>> C
<class '__main__.Foo Bar'>
Run Code Online (Sandbox Code Playgroud)

是否有任何风险,或者使用带有空格的类名是否被认为是不好的做法?

wim*_*wim 6

没有风险,这个类__name__是一个可写的属性,它不用于任何特别重要的事情——只是无聊的东西,比如 repr 和帮助显示。

如果您尝试为其分配非字符串,则会出现自定义错误消息,这有力地证明了 Python 开发人员有机会在此处限制为有效标识符,并且他们故意选择不这样做:

>>> class A:
...     pass
... 
>>> A.__name__ = '123Class'
>>> A.__name__ = 123
TypeError: can only assign string to 123Class.__name__, not 'int'
Run Code Online (Sandbox Code Playgroud)

这是 Guido 回答了一个类似的问题 - 关于属性名称是否应该限制为有效标识符:

https://mail.python.org/pipermail/python-dev/2012-March/117441.html

我之前已经多次就这个特定问题发表意见;这是一项功能,您可以将任意字符串与getattr()和 一起使用setattr()。然而,这些函数应该(并且确实!)拒绝非字符串。

相同的推理适用于类名(也可以在模块命名空间中存储为任意字符串)。此功能的一个示例用例:确保在一系列类名和某些外部数据源之间存在一致的映射,即使外部数据与 Python 保留字或语法发生冲突。