Difference between methods and attributes in python

I am learning python and doing an exercise about classes. It tells me to add nd attribute to my class and a method to my class. I always thought these were the same thing until I read the exercise. What is the difference between the two?

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1


Mental model:

  • A variable stored in an instance or class is called an attribute.
  • A function stored in an instance or class is called a method.

According to Python’s glossary:

attribute: A value associated with an object which is referenced by
name using dotted expressions. For example, if an object o has an
attribute a it would be referenced as o.a

method: A function which is defined inside a class body. If called as
an attribute of an instance of that class, the method will get the
instance object as its first argument (which is usually called self).
See function and nested scope.


Terminology applied to actual code:

a = 10                          # variable

def f(b):                       # function  
    return b ** 2

class C:

    c = 20                      # class attribute

    def __init__(self, d):      # "dunder" method
        self.d = d              # instance attribute

    def show(self):             # method
        print(self.c, self.d) 

e = C(30)
e.g = 40                        # another instance variable

Solution 2

A method is an attribute, but not all attributes are methods. For example, if we have the class

class MyClass(object):

    class_name = 'My Class'

    def my_method(self):
        print('Hello World!')

This class has two attributes, class_name and my_method. But only my_method is a method. Methods are functions that belong to your object. There are additional hidden attributes present on all classes, but this is what your exercise is likely talking about.

Solution 3

A quick,simplified explanation.

Attribute == characteristics.
Method == operations/ actions.

For example, Let’s describe a cat (meow!).

What are the attributes(characteristics) of a cat?
It has different breed, name, color, whether they have spots…etc.

What are methods (actions) of a cat?
It can meow, climb, scratch you, destroy your laptop, etc.

Notice the difference, attributes define characteristics of the cat.

Methods, on the other hand, defines action/operation (verb).

Now, putting the above definition in mind, let’s create an object of class ‘cat’…meowww

class Cat():

To create attributes, use def init(self, arg1, arg2) – (as shown below).

The ‘self’ keyword is a reference to a particular instance of a class.

def __init__(self, mybreed, name):
    # Attributes
    self.breed = mybreed
    self.name = name

# Operations/actions --> methods
def kill_mouse(self):
    print('Insert some method to kill mouse here')

Notice (above) ‘mybreed’ is an input argument that the user need to specify, whereas self.breed is an attribute of the instance assigned to ‘mybreed’ argument. Usually, they’re the same (e.g. breed for both, self.breed = breed). Here, it’s coded differently to avoid confusion.

And attributes are usually written as ‘self.attribute_name’ (as shown above).

Now, methods are more like actions, or operations, where you define a function inside the body of a class to perform some operation, for example, killing a mouse. A method could also utilize the attributes that you defined within the object itself.

Another key difference between a method and attribute is how you call it.

For example, let’s say we create an instance using the above class we defined.

my_cat = Cat()

To call an attribute, you use




For methods, you call it to execute some action. In Python, you call method with an open and close parenthesis, as shown below:


Solution 4

A method is a function defined in the class. An attribute is an instance variable defined in the class.


class Example(object):
    def __init__(self, name):
        self.name = name
    def hello(self):
        print 'Hi, I am ' + self.name

Here hello is a method, and name is an attribute.

Solution 5

class example:
    global a
    # a=0

    def __init__(self,x,y):
    def show(self):
        return "first name: {} & Last name: {}".format(self.fname,self.lname)


print('method associated with obj1: '+ obj1.show())
print('method associated with obj2: '+ obj2.show())



method associated with obj1: first name: reyan & Last name: ishtiaq…………….
method associated with obj2: first name: ishtiaq & Last name: reyan…………….

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply