Animal = {age = 1, name = "Animal", sound = "No Sound"} Animal.__index = Animal function Animal:new(age, name, sound) local self = {} setmetatable(self, Animal) self.age = age self.name = name self.sound = sound return self end function Animal:toString() return string.format("%s is %d years old and says %s", self.name, self.age, self.sound) end return Animal -- dog = Animal:new(12, "dave", "woof") -- print(dog:toString()) -- cat = Animal:new(15, "james", "meow") -- print(cat:toString())