定义“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