# Object-oriented programming

% START-CREDIT
% source: programming
```{attributiongrey} Attribution
:class: attribution
This chapter reuses material from _Learn Programming for Engineers_. {ref}`Find out more here <programming_credit>`.
```
% END-CREDIT

In this chapter, you'll learn about the fundamental concepts of classes and object-oriented programming (OOP) in Python as well as the key principles of encapsulation, inheritance, and polymorphism in OOP. This knowledge will enable you to better understand and use the classes that are everywhere in Python packages. For example, the class `rv_continuous` in `scipy.stats`, which is used for defining probability distributions, are used heavily in MUDE! For non-probability topics, this will help you recognize why objects in Python packages like Numpy have syntax like `object.mean()` or `object.shape`.