Common Lisp has generic functions, as you saw. Readers, writers, and/or accessors to classes are generic. So no issue with naming collisions.
(defclass a ()
((value :reader value)
(next :reader next)))
(defclass b ()
((value :reader value)
(next :reader next)))
This is totally valid; I can call VALUE and NEXT on instances of both A and B just fine.
But, if generic functions aren't your thing, you can skip calling the functions even and just do
(slot-value x 'next)
if you really want. This is basically
x->next
Again, works for any object with a field named by the symbol "next". But it's idiomatic to just call the reader function you defined, since getters can be instrumented, debugged, traced, etc. Some people prefer to call the reader A-NEXT or B-NEXT, but it's not necessary.
Regardless of all of that, symbols themselves belong to a namespace, called the "package". So your "edit" and my "edit" methods can have a different number of arguments without issue. (If they do have different arguments, they must mean different things.)