metatable是元表的意思,在python中,有meta class,即元类,不管是元表还是元类,都是功能强大的,简单的来说,元类就是类的类,元表就是table的table。
下面看看元表的强大,利用table模拟list的加法操作:
定义列表table
其中list.mt是用来准备定义list的元表的
定义初始化函数
其中setmetatable(l_ls, list.mt)是设置list的元表
定义list的操作函数
……
定义list的tostring方法,便于打印出人性化信息
定义list操作,相当于C++中的运算符重载
其中__add,做加法运算,__tostring会被print函数调用。另外还有:
__sub 减法 -
__mul 乘法 *
__div 除法 /
__unm 相反数 -
__mod 取模 %
__pow 乘幂 ^
__concat 连接操作 ..
__len 长度操作 #
__eq 相等 ==
__lt 小于 <
__le 小于等于 <=
不等于、大于、大于等于会用 ==, < , <=转换
__index 访问操作 table[key]
__newindex 赋值操作 table[key] = value
__call 调用操作 a = function xx() -- end a()
调用示例
元表是强大的,因为在你用它之前,它已经被设定过了……