Update:
Version: 2.0
Description: More class like
Needed Feature(s):
* Inheritance

class.lua (module)

--[[
	Author: Skye
--]]

local class = function(userdata)

	local meta = setmetatable({}, {
		
		__index = function(self, k)
			print(k)
			return self[k]
		end,
		
		__call = function(self, userdata)
			
			local getMeta = function(...)
				
				local submeta = setmetatable(self, {
					
					__index = userdata,
					
					__newindex = function(self, k, v)					
						rawset(self, k, v)						
					end,
					__call = function(self, ...)
						
						if rawget(self, "Init") then
							self:Init(self, ...)
						end
						
						return self
						
					end
					
				})
				
				return submeta
				
			end
			
			local meta = getMeta()
			
			return meta
		end
		
		
	})


return meta(userdata)

end

return class

server.lua

--[[
	Author: Skye
--]]

local modules = script.Parent
local Class = require(modules.Core.Class)
local Players = Class(game:GetService('Players'))

function Players:Init(self) -- Players object
	
	self.PlayerAdded:Connect(self.Added)
	self.PlayerRemoving:Connect(self.Removing)
	
end

Players.Added = function(Player)
	print(Player.Name, "has joined")
end
 
Players.Removing = function(Player)
	print(Player.Name, "has left")
end


return Players

Tell me what you think down below!