python如何定义保留字为变量名、函数名、类名、属性名、方法名

定义“lambda”为变量名的本地变量

locals()['lambda']=123

定义“def”为函数名的全局函数

globals()['def'] = lambda x:x*3

定义class为类名

python中有个预定义类object,是所有自定义类和内置类的基类,所有自定义类自动继承object。
下面这个是查看它的所有的子类的方法

>>> object.__subclasses__()
[, , , , , , 
, , , , , , 
, , , , , 
, , , 
, , , , , , 
, , , , , , 
, , , , , 
, , , , , 
, , , , 
, , , , 
, , , , 
, , , , 
, , , , 
, , , , 
, , , , , 
, , , , , , 
, , , , 
, , 
, , , 
, , 
, , , , 
, , 
, , 
, , 
, , , 
, , , , 
, , , 
, , , 
, , , 
, , , 
, , , , 
, , , 
, , , , 
, , , , 
, , , , 
, , , 
, , , 
, , , 
, , , 
, , , 
, , , 
, , , 
, , , , 
, , , , 
, , , , 
, , , , 
, , , 
, , , 
, , , 
, , , 
, ]

例如,调用内置str类的call方法:

>>> str.__call__(2)#相当于str(2)
'2'

下面进行骚操作

import types
A  = types.new_class('class')

查看效果

>>> object.__subclasses__()
[, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ]

这个定义了'types.class'类,实例化的方式是:

>>> a = A()                     
>>> a

如果想把它改在命名空间main底下,怎么弄呢?

>>> A.__module__ = __name__
>>> A

搞定了。

在命名空间“main”下定义object为类名

>>> A = type('object',(object,),{})#继承object
>>> A

定义for为属性名,定义while为方法名

class A:
    def __init__(self):
        setattr(self,'for',123)
        setattr(self,'while',lambda self:getattr(self,'for')*2)

参考资料:python3-cookbook.readthedocs.io

你可能感兴趣的:(python如何定义保留字为变量名、函数名、类名、属性名、方法名)