# Python Classes

> Learn how to define classes in Python and create objects from them, including methods, the self argument, and the __init__ constructor for properties.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-12-26 | Topics: [Python](https://flaviocopes.com/tags/python/) | Canonical: https://flaviocopes.com/python-classes/

In addition to using the [Python](https://flaviocopes.com/python-introduction/)-provided types, we can declare our own classes, and from classes we can instantiate objects.

An object is an instance of a class.
A class is the type of an object.

Define a class in this way:

```python
class <class_name>:
    # my class
```

For example let's define a Dog class

```python
class Dog:
    # the Dog class
```

A class can define methods:

```python
class Dog:
    # the Dog class
    def bark(self):
        print('WOF!')
```

> `self` as the argument of the method points to the current object instance, and must be specified when defining a method.

We create an instance of a class, an **object**, using this syntax:

```python
roger = Dog()
```

Now `roger` is a new object of type Dog.

If you run

```python
print(type(roger))
```

You will get `<class '__main__.Dog'>`

A special type of method, `__init__()` is called constructor, and we can use it to initialize one or more properties when we create a new object from that class:

```python
class Dog:
    # the Dog class
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print('WOF!')
```

We use it in this way:

```python
roger = Dog('Roger', 8)
print(roger.name) # 'Roger'
print(roger.age)  # 8

roger.bark() # 'WOF!'
```

One important features of classes is inheritance.

We can create an Animal class with a method `walk()`:

```python
class Animal:
    def walk(self):
        print('Walking..')
```

and the Dog class can inherit from Animal:

```python
class Dog(Animal):
    def bark(self):
        print('WOF!')
```

Now creating a new object of class `Dog` will have the `walk()` method as that's inherited from `Animal`:

```python
roger = Dog()
roger.walk() # 'Walking..'
roger.bark() # 'WOF!'
```
