インスタンスや、self がわからないの?
オブジェクト指向の基本だよ

self は、そのインスタンスを指す。
Ruby では、

class Cat
def initialize( name, weight )
@name = name
@weight = weight
end
end

p bob = Cat.new( "bob", 5 )
p alice = Cat.new( "alice", 4 )

new で、Cat というひな形から、各インスタンスを作る(実体化)

bob は、<Cat: @name="bob", @weight=5>
alice は、<Cat: @name="alice", @weight=4>

Rubyの、@name = name が、Python では、self.name = name になる。
Rubyではインスタンス変数は、@ で表すけど、pythonではself を付ける

インスタンス変数とは、各インスタンスで異なる部分。
一方、クラス変数とは、そのクラス(すべてのインスタンス)で共通の部分。

Rubyでは一々、selfを付けなくても良いように、Rubyの実装を、かなり頑張って作っている。
self.name よりも、@name の方がわかりやすいから!

オブジェクト指向・関数型は、Rubyで学んだ方がよい。
Python, JavaScript, Kotlin にも応用できるから