Python文档(Python2和Python3)声明标识符不能以数字开头。根据我的理解,这只是一个编译器约束(另请参阅this question)。那么用数字开始动态创建的标识符有什么不对吗?例如:
type('3Tuple', (object,), {})
setattr(some_object, '123', 123)
不可否认,上面的第二个示例(使用setattr
)可能不那么相关,因为可以通过dir
反省对象,发现属性'123'
但无法通过{{检索它1}}。
所以我会在第一个例子上详细说明(看起来对我来说更相关)
应为用户提供固定长度的元组,因为元组长度是任意的,并且事先不知道用于检索此类元组的代理函数(也可以是实现some_object.123
或__call__
的类):
__getattr__
典型的用例涉及引用那些动态创建类的实例,而不是类本身,例如:
def NTuple(number_of_elements):
# Add methods here.
return type('{0}Tuple'.format(number_of_elements),
(object,),
{'number_of_elements': number_of_elements})
但是类名仍然提供了一些有用的信息(而不是仅使用limits = NTuple(3)(1, 2, 3)
):
'Tuple'
这些类名在编译时也不会与任何代码相关,因此它不会给程序员/用户带来任何障碍。