@sj95126 has already given you the answer.
Here's some more insight
class Foo:
pass
def wrapped(*args, **kwds):
return dir(*args, **kwds)
Foo.dir = dir
Foo.wrapped = wrapped
f = Foo()
print(f'd() : {dir()}')
print(f'w() : {wrapped()}')
print(f'd(f) : {dir(f)}')
print(f'w(f) : {wrapped(f)}')
print(f'f.d(): {f.dir()}')
print(f'f.w(): {f.wrapped()}')
which gives the output
d() : ['Foo', '__PYDOC_get_help', '__PYTHON_EL_eval', '__PYTHON_EL_eval_file', '__PYTHON_EL_native_completion_setup', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'dir_wrapped', 'dir_wrapped_in_pure_python_fn', 'f', 'wrapped']
w() : ['args', 'kwds']
d(f) : ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'dir', 'wrapped']
w(f) : ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'dir', 'wrapped']
f.d(): ['Foo', '__PYDOC_get_help', '__PYTHON_EL_eval', '__PYTHON_EL_eval_file', '__PYTHON_EL_native_completion_setup', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'dir_wrapped', 'dir_wrapped_in_pure_python_fn', 'f', 'wrapped']
f.w(): ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'dir', 'wrapped']
Note that:
d(f), w(f) and f.w() give identical output.
d() and f.d() give identical output.
w() is the odd one out.
In group 1 above, f is passed as an argument to the function. In d(f) and w(f) it is done explicitly. In f.w() it is done implicitly by the binding behaviour of the pure-Python function wrapped.
Because dir is not a pure-Python function, this binding behaviour is absent, and f is not passed in, so its output is the same as that of d().
(Irrelevant to your question, but for completeness: wrapped() passes zero arguments to wrapped therefore it passes zero arguments to dir and calling dir with zero arguments makes it return the list of names in the scope in which it was called, that is the local scope of wrapped in which the only names are the parameters args and kwds.