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 Li “ All things are objects ” Well , If someone says you can't program object-oriented at all , Or don't understand object orientation at all , That might get your abuse , At the end of the day , Do you really know object oriented ？ Try to answer the following questions ：
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 help you code more or less ！
Before we talk about object-oriented programming , Let's look at design patterns first , Design patterns are mainly formalized by programming 、 Design principles 、 Design patterns constitute , See the figure below for details ：
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 release is 1991 year ,Linux Official release is also 1991 year ,Java The official release is 1995 year ,Go The official release is 2009 year , The historical development of object-oriented concept is ：1960 Year of simula The concept of class and object is proposed for the first time , And then 70 The programming language of the '80s Smalltalk It's the first time to use the object-oriented concept , It can be seen that the concept of object orientation was put forward early , And with the development of software , Most of the languages that followed 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 , 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 ： Normalization of programming 、 Contains properties and methods 、 Is an example 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 formalization of programming , Take class and object as basic unit , By encapsulation 、 abstract 、 Polymorph 、 Inherit these four characteristics （ It's not a strong demand ） To achieve code design , The purpose is to improve the maintainability of software 、 Expandable Suite 、 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 classes and objects to organize code , It also has four characteristics , Naturally, it is . But if you don't have four features, you must be an object-oriented programming language ？ Obviously there is no reference definition , With the development of software , Many languages are divorced from the four characteristics , such as Java Although it supports 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 property , stay Python Li doesn't support , But all three are object-oriented programming languages .
We often talk about Python Everything is an 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 On the premise of , So judge “ All things ” Is it an object , Just judge whether it belongs to the object , The concept of everything here is very broad , The more common ones are ： Numbers 、 String 、 Brin 、 For example, function , The results are as follows ：
Why are all object types ？ Let's take the brin value as an example , Through 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 、 And so on , In fact, one object after another is constructed , These objects have magical methods that enable them to support a range of operations , such as __lt__ So that it has a relatively small capacity , such as __eq__ So that it has the ability to wait for judgment .
About the four characteristics ： Package 、 abstract 、 Inherit 、 Polymorph , You can see the summary in the figure below ：
Python There are four characteristics of natural support , I used to be vague about encapsulation and abstraction , Both encapsulate abstract common code , And then provide it to other methods to call , 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 for external programs to call （ Here's the picture ）, Here you can see a It is equivalent to Java Of public Keywords , Is to allow any call ; and _a It is Pythoner Rio's established private method , If you call pycharm This ide It will use wavy lines to prompt users that it is an illegal reference ; If it is __a, It is equivalent to Java Of private, If an external call ide It will be marked with yellow to indicate an error .
The results are as follows ：
As for abstraction , The broad sense is to extract common code , The corresponding 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 “ Based on the interface rather than implementing programming ”. It is a pity that , stay Python The interface feature is not available in , If you're fuzzy about the interface , You can search for lower interface classes interface, I believe I will learn a lot of information . but Python You can go through duck-typing And abstract base classes to implement extra abstraction , In this follow-up article, I will introduce 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 read it, there will still be some harvest