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
#引用类的数据属性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!