--[[
1.定义基类
A = class()
function A:init(a, b) -- 构造函数
self.a = a
self.b = b
print("A:init", a, b)
end
function A:Test()
print("A:Test")
for k,v in pairs(self) do
print(k,v)
end
end
2.继承
B = class(A)
function B:init(a, b, c, d) -- 先调用父类构造
self.c = c
self.d = d
print("B:init", c, d)
end
function B:Test() -- 重载
print("B:Test1")
end
a = A(100, 200)
b = B(1, 2, 3, 4)
a:Test()
b:Test()
--b:Test1()
--]]
local function class(base)
assert(base == nil or type(base) == "table")
local cls = {}
local mt = {}
local obj_mt = {
__index = cls,
__newindex = function(self, key, value)
if cls[key] ~= nil then
Debug.LogError(debug.traceback("[ERROR] '" .. key .. "' is keyword", 2))
return
end
rawset(self, key, value)
end,
}
function cls.attach(obj)
return setmetatable(obj, obj_mt)
end
-- function cls.new(_, ...)
-- return cls.attach({}):__init(...)
-- end
function cls.new(...)
return cls.attach({}):__init(...)
end
function cls.inherit(base)
assert(type(base) == "table")
cls.super = base
mt.__index = base
end
function cls.__init(obj, ...)
local super = cls.super
if super then
super.__init(obj, ...)
end
local init = rawget(cls, "init")
if init then
init(obj, ...)
end
return obj
end
function cls.get(self, key)
if key == nil then
return nil
end
return self[key]
end
function cls.set(self, key, value)
if key == nil then
return
end
self[key] = value
end
-- mt.__call = cls.new
if base then
cls.inherit(base)
end
return setmetatable(cls, mt)
end
return class
Lua面向对象编程
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- OOA OOA 基本概念 OOA 全称 Object-Oriented Analysis 面向对象分析 指的是在一...
- HTML 学习笔记 May 10,2017 js函数调用过程内存分析、js函数细节、js一维数组细节、二维数组转置...
- 重读了一下《Objective-C基础教程》,发现书中关于面向对象编程本质,有一章独特的解释。 什么是面向对象 O...