selfの使いどころというか何者なのかが分かりません

class MyClass1
def self.define_m(name)
define_method(name){
puts name
}
end
define_m :method_a
define_m :method_b
end

class MyClass2
def define_m(name)
define_method(name){
puts name
}
end
define_m :method_a
define_m :method_b
end

上のようなコードを書いてみたけど、
classtest.rb:21: undefined method `define_m' for MyClass2:Class (NoMethodError)
ってエラーが出てきて実行できません
selfがあるのとないのとではどう違うのでしょうか?