Free tools Windows power users keep installed
One-click scans. No signup required.
A Python function is a callable you can invoke directly; a method is a callable accessed through an object or class attribute. For an ordinary instance method, accessing it through an instance automatically passes that instance as the first argument—usually named self. Class methods bind the class instead, so not every method receives an instance.
Function vs. method: the practical difference
A function can stand on its own:
def double(number):
return number * 2
double(3) # 6
A method is accessed through an object, typically with dot notation. For example, append is a list method:
values = []
values.append(3)
The Python Tutorial describes a method as a function that belongs to an object and is named through attribute notation such as obj.methodname. The object’s type defines which methods are available; different types can have methods with the same name. See the Python 3.14 Tutorial, “More Control Flow Tools”.
What happens to the first argument?
When a function is defined in a class and accessed through an instance, Python supplies that instance as the first argument. In this example, greeter.greet("Sam") passes greeter as self:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
#1 Best Overall
class Greeter:
def greet(self, name):
return f"Hello, {name}"
greeter = Greeter()
greeter.greet("Sam")
The same call can be written with the instance supplied explicitly: Greeter.greet(greeter, "Sam"). In general, for this ordinary instance-method case, x.f(1) is equivalent to C.f(x, 1) when x is an instance of C. That automatic binding explains why the method definition has a first parameter before the argument supplied in the call. The behavior is described in the Python 3.14 Tutorial, “Classes” and the Python 3.14 Language Reference, “Data model”.
self is a convention, not a keyword
The first parameter is conventionally named self, but Python does not require that spelling. Binding follows from accessing the function through an instance, not from naming the parameter self. The Python Tutorial explicitly says the name has no special meaning to Python. You should still use self in ordinary instance methods because it is the established convention and makes code easier to read.
Rank #2
Methods do not all bind the same way
Instance methods bind an instance
The common case is an instance method such as Greeter.greet: retrieved through an instance, it receives that instance as its first argument.
Class methods bind the class
A method decorated with @classmethod receives the class as its first argument, whether it is retrieved through the class or an instance. In the data model’s terminology, the bound method’s __self__ is the class, rather than a particular instance.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchA function stored on an instance is not automatically bound
Putting a function directly in an instance attribute does not, by itself, turn it into a bound method. The automatic instance binding described above applies when a function defined in a class is accessed through an instance. The distinction is set out in the Python data model reference.
How to tell which one you are looking at
- Direct call:
double(3)calls a function by its name. - Attribute call:
values.append(3)accesses a method through an object. - Implicit first argument: With an ordinary instance method,
obj.method(arg)suppliesobjbeforearg. - Class-level call:
Class.method(obj, arg)makes that instance argument explicit for an ordinary instance method. - Binding target: An instance method binds an instance; a class method binds the class.
In Python’s data model, a bound instance method exposes the object it is bound to as method.__self__ and the original function as method.__func__. These attributes can help when inspecting a method, though everyday calls rarely require them.
Why the distinction is useful
When a call seems to be missing an argument, check how the callable was accessed. A function called directly receives the arguments you pass. An ordinary method retrieved from an instance also receives that instance automatically. Conversely, calling the class-level function form without explicitly supplying an instance can leave the method’s first parameter unsatisfied.
The Python documentation’s list example contrasts append() with an expression that builds a new list, result = result + [a]. It presents append() as the more efficient choice in that example; it is not a universal performance claim about methods versus functions.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




