My piece of code looks like::let ClassZ = {'author': Juchen.Zeng}:function ClassZ.Print_author_name():    echo self.author:endfunction:function ClassZ.Change_author_name(arg1):    let self.author = a:arg1:endfunction:call ClassZ.Print_author_name()Juchen.Zeng:call ClassZ.Change_author_name('MarioLuisGarcia'):call ClassZ.Print_author_name()MarioLuisGarciaAnd in vim's official doc, it says:    :function uk2nl.translate(line) dict    :  return join(map(split(a:line), 'get(self, v:val, ???)'))    :endfunctionLet's first try it out:    :echo uk2nl.translate('three two five one')    drie twee ??? eenThe first special thing you notice is the dict at the end of the :functionline.  This marks the function as being used from a Dictionary.  The selflocal variable will then refer to that Dictionary.Why in my examples, without extra dict argument, the self reference seems work well? Is this dict arg indispensable?
Why my dict methods works well without defining with extra `dict` argument ? [vim]
vim
The dict attribute is dispensable in this case, because defining and assigning function directly to dictionary implied dict attribute for  function, using dict attribute is not necessary anymore.That type of functions are called anonymous-function or numbered-function.In your example, you have defined two ClassZ keys, Change_author_name and Print_author_name which have values are Funcref.You can verify it, using function()::function ClassZ.Print_author_name   function 394() dict1  echo self.author   endfunctionYou can see, a numbered-function - 394 had been created, with dict attribute.