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

时间:2017-03-13 18:50:27

标签: python identifier

Python文档(Python2Python3)声明标识符不能以数字开头。根据我的理解,这只是一个编译器约束(另请参阅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'

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

0 个答案:

没有答案