This article is based on the geek time king contest 《 Beauty of design pattern 》 Make a summary and own understanding .
When it comes to object-oriented programming , As a qualified Pythoner, It can be said that it's easy to come by . After all, Python in “ Everything is an object ” Well , If people say you don't know object-oriented programming at all , Or don't understand object orientation at all , That might get your abuse , At the end of the day , Do you really understand object oriented ？ Try to answer the following questions ：
- The definition of object-oriented programming is ？Python Why object oriented programming languages ？Python Everything in the universe is an object. What is the specific form of expression ？
- What are the four features of object orientation ？ stay Python Do you have all these four points in the book ？ How does this work ？
Tips ： If the answer to the above question is clear 、 Very clear , That article can be skipped , If you don't feel clear , That article will give you code help more or less ！
Before we talk about object-oriented programming , Let's look at design patterns first , Design patterns are mainly composed of programming paradigms 、 Design principles 、 Design patterns constitute , The details are as follows: ：
There are a lot of concepts in Turin , But the initial grasp of , Just have a general impression .
What is object-oriented , From history , We know Python The official announcement is 1991 year ,Linux The official release is also 1991 year ,Java The official announcement is 1995 year ,Go The official announcement is 2009 year , and object-oriented The concept of historical development is ：1960 Year of simula The concept of class and object is proposed for the first time , And then 70 Programming language of the s Smalltalk For the first time, object-oriented concept is used , It can be seen that the concept of object-oriented was put forward early , And with the development of software , Most subsequent languages became object-oriented languages , Is there a process oriented language ？ yes , we have ,C Language is a typical process oriented language .
If you are interested, you can read Wikipedia , Learn about the history of these languages .
- object-oriented - Wikipedia
- Python- Wikipedia
- Java- Wikipedia
- Linux- Wikipedia
- Go- Wikipedia
object-oriented , namely object-oriented, It is subdivided into object-oriented analysis 、 Object oriented design 、 object-oriented programming , namely OOA(Analysis)、OOD(Design)、OOP(programming).
If you read Wikipedia , Maybe it's still fuzzy , Let's know the key words through the figure below ： Programming paradigm 、 Contains properties and methods 、 Is an instance of a class 、 The basic unit of a program 、 The purpose is to improve the expansibility and flexibility of the software . That sentence is ： Object oriented is a programming paradigm , Take class and object as basic unit , Through encapsulation 、 abstract 、 polymorphic 、 Inherit these four characteristics （ Not a strong requirement ） To achieve code design , The purpose is to improve the maintainability of software 、 Extensibility 、 Reusability . Of course, the above is my personal words , Not professional , But the meaning is right .
that Python Why is Object oriented programming language , Obviously , It provides class and object features to organize code , It also has four characteristics , Naturally, it is . But it's not an object-oriented programming language without four features ？ Obviously there is no reference definition , With the development of software , Many languages are divorced from the four characteristics , such as Java Although we support inheritance , But it doesn't have much inheritance ; such as Go Just give up inheriting such features , and Java and Go There's more interface This interface feature , stay Python Li does not support , But all three are object-oriented programming languages .
We often talk about Python Everything is object , How to understand this sentence ？ It's simple , stay Python When we want to construct a class object , It's all about inheritance object Precondition , So the judge “ Creation ” Is it the object , Just judge whether it belongs to the object , The concept of everything here is very broad , The more common ones are ： Numbers 、 character string 、 Boolean 、 Function as an example , The result is as follows ：
Why are they all object types ？ Let's take Boolean values as an example , adopt dir There are a lot of properties and methods in it （ Here's the picture ）, Then these methods can't come out of thin air , So it's all inherited , Then it's clearer , When we use variables to refer to numbers 、 String and so on , In fact, one object after another is constructed , These objects have magical methods that enable them to support a series of operations , such as __lt__ So that it has a relatively small capacity , such as __eq__ So that it has the ability of equal judgment .
About the four characteristics ： encapsulation 、 abstract 、 Inherit 、 polymorphic , You can see the summary in the figure below ：
Python Nature supports four characteristics , I used to be vague about encapsulation and abstraction , Both encapsulate abstract common code , And then provide it to other method calls , This understanding is one-sided , Because the meaning of the two is very different . Encapsulation is used to hide implementation and protect data , such as Python We often define private types in classes to be called by external programs （ Here's the picture ）, Here you can see a amount to Java Of public keyword , Is to allow any call to ; and _a It is Pythoner Rio's established private method , If the pycharm such ide Wave line will be used to prompt the user that it is an illegal reference ; If it is __a, It's equivalent to Java Of private, If an external call ide It will be marked with yellow to indicate an error .
give the result as follows ：
As for abstraction , The broad sense is to extract common code , Methods for external exposure ; The narrow sense of understanding is the concept of interface , Only the methods to be exposed are included in the interface class , Without revealing the specific implementation , That is to say “ Programming based on interfaces rather than implementation ”. It is a pity that , stay Python The interface feature is not provided in , If you're fuzzy about the interface , You can search for interface classes interface, I believe I will learn a lot of information . but Python through duck-typing And abstract base classes to implement extra abstraction , This follow-up article introduces in detail .
In addition, inheritance and polymorphism are the basic syntax , I won't elaborate here .
That's all for this article , Although it's all about the foundation , But I believe that if you finish reading it, there will still be some harvest .