Custom method not working

I have this custom method in a ModuleScript:

local module = {}
function module:LookAtMouse(Mouse)
	self.CFrame = CFrame.lookAt(self.Position, Vector3.new(Mouse.Hit.X,self.Position.Y,Mouse.Hit.Z))
end
return module

and this in a Local Script:

local Functions = require(script:WaitForChild("Functions")) --The module script containing the method
local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()

local Character = Player.Character or Player.CharacterAdded:Wait()
local HRP = Character:WaitForChild("HumanoidRootPart")

local function test()
   HRP:LookAtMouse(Mouse)
end

game:GetService("ContextActionService"):BindAction("Test",test,true,Enum.KeyCode.Q)

Basically, when the player presses Q, their character will “look” towards the mouse position. I wanted to make this a custom method to make the code easier to read but instead I get this error:
image
Not sure what the problem is, I tried looking on the Wiki and I just got more confused.

local module = {}

function module:LookAtMouse(Object, Mouse)
    Object.CFrame = CFrame.lookAt(
        Object.Position,
        Vector3.new(
            Mouse.Hit.X,
            Object.Position.Y,
            Mouse.Hit.Z
        )
    )
end

return module
local Functions = require(script:WaitForChild("Functions")) --The module script containing the method
local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()

local Character = Player.Character or Player.CharacterAdded:Wait()
local HRP = Character:WaitForChild("HumanoidRootPart")

local function test()
   Functions:LookAtMouse(HRP, Mouse)
end

game:GetService("ContextActionService"):BindAction("Test", test, true, Enum.KeyCode.Q)

try this

That’s not exactly what I was looking for, since this isn’t any more readable than just calling the function as Functions.LookAtMouse(HRP,Mouse), while keeping the LookAtMouse() function the same.
I was hoping to mantain the self argument. Thank you tho.

return function(Object)
    local Module = {
        Object = Object
    }

    function Module:LookAtMouse(Mouse)
        self.Object.CFrame = CFrame.lookAt(
            self.Object.Position,
            Vector3.new(
                Mouse.Hit.X,
                self.Object.Position.Y,
                Mouse.Hit.Z
            )
        )
    end

    return Module
end
local Functions = require(script:WaitForChild("Functions")) --The module script containing the method
local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()

local Character = Player.Character or Player.CharacterAdded:Wait()
local HRP = Character:WaitForChild("HumanoidRootPart")

local function test()
    Functions(HRP):LookAtMouse(Mouse)
end

game:GetService("ContextActionService"):BindAction("Test", test, true, Enum.KeyCode.Q)

how about this?
I tried using self here instead