Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die objektorientierte Programmierung mit Python

Detaillierte Einführung in die objektorientierte Programmierung mit Python

零下一度
零下一度Original
2017-07-03 09:41:371377Durchsuche

1. Was ist objektorientiert

Objektorientiert (oop) ist eine abstrakte Methode, um die Welt zu verstehen, und alles besteht aus Objekten. Bei der Programmierung handelt es sich um eine Methode zur Programmentwicklung, bei der Objekte als Grundeinheit des Programms verwendet werden.

2. Der Unterschied zwischen objektorientiert und prozessorientiert

Der Kern von prozessorientiert ist das Wort „Prozess“. Probleme lösen. Prozessorientiert Die Methode zum Entwerfen eines Programms ähnelt dem Entwerfen eines Fließbands, einer mechanischen Denkweise

Vorteile: Komplexe Probleme werden vereinfacht und rationalisiert

Nachteile: schlechte Skalierbarkeit

Zu den Hauptanwendungsszenarien gehören: Linux-Kernel, Git und HTTP-Dienste

Objektorientierte Programmierung, der Kern ist das Objekt und das Objekt ist die Kombination von Merkmalen (Variablen) und Fähigkeiten ( Funktionen).

Vorteile: Lösen Sie das Problem der schlechten Programmskalierbarkeit

Nachteile: Schlechte Steuerbarkeit, keine Vorhersage des Endergebnisses möglich

Das Hauptanwendungsszenario ist Software mit sich häufig ändernden Anforderungen ist, mit Benutzern Software mit häufigen Interaktionen

Es ist zu beachten, dass objektorientierte Programmierung nicht alle Probleme löst, sondern nur zur Lösung der Skalierbarkeit verwendet wird. Natürlich ist in der heutigen Internet-Software die Skalierbarkeit das Wichtigste

3. Das Konzept von Objekten und Klassen

In Python ist alles ein Objekt, und ein Objekt sollte seine eigenen Attribute haben. und Es ist ein Feature und hat seine eigene Funktion, das heißt eine Methode

In Python werden Features durch Variablen und Funktionen durch Funktionen dargestellt, sodass das Objekt eine Kombination aus Variablen und Funktionen ist

und aus jeder Klasse wird eine Klasse aus verschiedenen Objekten mit denselben Eigenschaften und Funktionen extrahiert. Daher ist eine Klasse eine Kombination gemeinsamer Eigenschaften und Funktionen einer Reihe von Objekten

Definieren wir a Klasse mit Methoden und Das Definieren einer Funktion ist etwas ähnlich:

#定义一个中国人的类class Chinese:#共同的特征country='China'#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')

Auf diese Weise haben wir eine Klasse definiert. Hinweis: 1. Verwenden Sie das Klassenschlüsselwort

2. Klassenname Im Allgemeinen wird der erste Buchstabe großgeschrieben und es sind keine Klammern vor dem Doppelpunkt erforderlich, was sich von der Funktionsdefinition unterscheidet
3. Im Gegensatz zu Funktionen führen Klassen den Code in der Klasse aus während der Definitionsphase

4. Klassen haben zwei Attribute. Die gemeinsamen Merkmale werden Datenattribute genannt und die gemeinsamen Funktionen werden Funktionsattribute genannt

Wie generiert man ein Objekt aus dieser Klasse? Instanziierung:

p1=Chinese()
p2=Chinese()

Wir können daraus schließen, dass es in einem Programm, egal was in der realen Welt passiert, tatsächlich zuerst eine Klasse und dann Objekte gibt

Wir haben zwei Objekte durch Instanziierung erhalten, aber es gibt ein Problem. Die Eigenschaften und Funktionen der beiden Objekte sind völlig unvereinbar mit dem Konzept, dass alle Objekte unterschiedlich sein sollten. und so eine Welt ist interessant

Tatsächlich haben wir bei der Definition der Klasse vergessen, die Funktion __init__() zu definieren. Die richtige Definitionsmethode sollte so aussehen:

#定义一个中国人的类class Chinese:#共同的特征country='China'#初始化def __init__(self,name,age):
        self.name=name  #每个对象都有自己的名字self.age=age    #每个对象都有自己的年龄#共同的技能def talk(self):print('is talking Chinese')def eat(self):print('is eating Chinese food')#实例化的方式产生一个对象p1=Chinese('zhang',18)

Der Klassenname mit Klammern ist die Instanziierung, die automatisch die Ausführung der __init__-Funktion auslöst. Sie können damit Ihre eigenen Eigenschaften für jedes Objekt anpassen.

Bei der Definition der __init__-Funktion gibt es drei Parameter in Klammern, aber wenn wir den Aufruf instanziieren, übergeben wir nur zwei Werte. Warum gibt es keinen Fehler? Dies liegt daran, dass die Funktion von self darin besteht, das Objekt selbst beim Instanziieren automatisch an den ersten Parameter der Funktion __init__ zu übergeben. Natürlich ist self nur ein Name, wenn Sie es blind schreiben um es zu verstehen.

Achtung. Dieser automatische Wertübertragungsmechanismus spiegelt sich nur bei der Instanziierung wider. Eine Klasse hat auch die Funktion einer Attributreferenz Aus dem obigen Fehlercode geht hervor, dass es bei der Referenzierung von Attributen keine automatische Wertübertragung gibt

Wir haben das Konzept des Namespace gelernt, indem wir eine Variable oder eine Funktion definieren, um einen Speicher im Speicher zu öffnen .Space, Klassen haben auch definierte Variablen (Datenattribute) und definierte Funktionen (Funktionsattribute), die über die .__dict__-Methode
#引用类的数据属性print(Chinese.country)  #China#引用类的函数属性# Chinese.talk()#TypeError: talk() missing 1 required positional argument: 'self'print(Chinese.talk) #<function Chinese.talk at 0x000001BC5F13D1E0>Chinese.talk('self')    #is talking Chinese#增加属性Chinese.color='yellow'#删除属性del Chinese.color

angezeigt werden können Der obige Code Wir kennen die angezeigten Ergebnisse. Drucken Sie den Namensraum des instanziierten Objekts aus und zeigen Sie nur seine eigenen eindeutigen Attribute an. Wenn Sie die mit anderen Objekten geteilten Attribute finden möchten, müssen Sie zum Klassen-Namensraum gehen, um

Es gibt noch eine andere Frage: Es gibt kein Funktionsattribut im Namensraum des Objekts, aber sind die von verschiedenen Objekten angegebenen Funktionen dieselbe Funktion?

可以看到,并不是,他们的内存地址都不一样。而且注意bound method,是绑定方法

对象本身只有数据属性,但是Python的class机制将类的函数也绑定到对象上,称为对象的方法,或者叫绑定方法。绑定方法唯一绑定一个对象,同一个类的方法绑定到不同的对象上,属于不同的方法。我们可以验证一下:

当用到这个函数时:类调用的是函数属性,既然是函数,就是函数名加括号,有参数传参数

而对象用到这个函数时,对象没有函数属性,他是绑定方法,绑定方法怎么用呢,也是直接加括号,但不同的是,绑定方法会默认把对象自己作为第一个参数

class Chinese:
    country='China'def __init__(self,name,age):
        self.name=name  
        self.age=age    def talk(self):print('%s is talking Chinese'%self.name)def eat(self):print('is eating Chinese food')

p1=Chinese('zhang',18)
p2=Chinese('li',19)
Chinese.talk(p1)    #zhang is talking Chinesep1.talk()           #zhang is talking Chinese

只要是绑定方法,就会自动传值!其实我们以前就接触过这个,在python3中,类型就是类。数据类型如list,tuple,set,dict这些,实际上也都是类,我们以前用的方法如l1.append(3),还可以这样写:l1.append(l1,3)

未完待续。。。

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die objektorientierte Programmierung mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn