Python 用数字启动动态创建的标识符是否有问题?

Python 用数字启动动态创建的标识符是否有问题?,python,identifier,Python,Identifier,Python文档(和)声明标识符不能以数字开头。据我所知,这只是一个编译器约束(另请参见)。那么,用数字启动动态创建的标识符是否有任何错误?例如: type('3Tuple', (object,), {}) setattr(some_object, '123', 123) limits = NTuple(3)(1, 2, 3) 编辑 诚然,上面的第二个示例(使用setattr)可能不太相关,因为人们可以通过dir反省对象,发现属性'123',但无法通过某些对象.123检索它 因此,我将对第一

Python文档(和)声明标识符不能以数字开头。据我所知,这只是一个编译器约束(另请参见)。那么,用数字启动动态创建的标识符是否有任何错误?例如:

type('3Tuple', (object,), {})
setattr(some_object, '123', 123)
limits = NTuple(3)(1, 2, 3)
编辑 诚然,上面的第二个示例(使用
setattr
)可能不太相关,因为人们可以通过
dir
反省对象,发现属性
'123'
,但无法通过
某些对象.123
检索它

因此,我将对第一个示例进行更详细的阐述(这对我来说似乎更相关)。
应向用户提供固定长度的元组,并且由于元组长度是任意的且事先不知道,因此使用了用于检索此类元组的代理函数(也可以是实现
\uuuuuuuuuu调用\uuuuuuuu
\uuuuuu getattr\uuuuuuu
的类):

典型用例涉及引用那些动态创建类的实例,而不是类本身,例如:

type('3Tuple', (object,), {})
setattr(some_object, '123', 123)
limits = NTuple(3)(1, 2, 3)
但类名仍然提供了一些有用的信息(而不仅仅是使用
“Tuple”
):


此外,这些类名在编译时与任何代码都不相关,因此不会给程序员/用户带来任何障碍。

我认为这样做没有什么“错误”,但考虑到语言的其他部分实际上不适合使用这样定义的对象/类,当你真的想用它们做点什么的时候,你就必须使用后门的古怪行为(比如你给出的定义它们的例子)。似乎通常没有什么用处,除非您试图出于或多或少的正当理由混淆某些东西…@twalberg我添加了一个扩展示例,它不会干扰编译时相关的任何语言概念。诚然, StAtTr.示例具有有限的相关性(见我的编辑),但动态创建类并不罕见(我不认为它是“后门古怪”)。因为这些类没有被显式引用(只引用了它们的实例),所以在查找与类名匹配的标识符时也没有问题;该类(及其名称)仅通过其实例通过
obj.\uuuuuu class\uuuuu.\uuuuu name\uuuu
引用。