τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Πίνακας περιεχομένων
1. Αντικειμενοστρεφείς έννοιες προγραμματισμού (OOP)
1.1 Τι είναι οι κλάσεις και τα αντικείμενα;
1.3 Σχέση κλάσεων και αντικειμένων
2.2 Αφηρημένες τάξεις και μέθοδοι
3.1 Ορισμός και εισαγωγή κλάσης
3.2 Χαρακτηριστικά και μέθοδοι κλάσης
6.1 Η έννοια του πολυμορφισμού
7.2 Χρήση ενδοσκόπησης για δυναμικές λειτουργίες
8. Στατικές μέθοδοι και μέθοδοι κλάσεων
Στήλη: σημειώσεις μελέτης πύθωνα
Προηγούμενος τόμος: Ρυθμοποίηση Python και διαχείριση πακέτων
Αντικειμενοστραφής προγραμματισμός (OOP) Είναι ένα πρότυπο προγραμματισμού που υλοποιείται με την οργάνωση προγραμμάτων σε συλλογές αντικειμένων. Τα αντικείμενα περιέχουν όχι μόνο δεδομένα αλλά και μεθόδους χειρισμού αυτών των δεδομένων. Οι βασικές έννοιες του OOP περιλαμβάνουν κλάσεις, αντικείμενα, ιδιότητες και μεθόδους.
- Τάξη Είναι ένα πρότυπο ή σχεδιάγραμμα που χρησιμοποιείται για τη δημιουργία αντικειμένων. Οι κλάσεις ορίζουν τις ιδιότητες και τη συμπεριφορά των αντικειμένων.
- Αντικείμενο Είναι ένα παράδειγμα της τάξης. Η δημιουργία ενός αντικειμένου είναι η δημιουργία ενός συγκεκριμένου στιγμιότυπου με βάση την κλάση.
παράδειγμα:
- class Dog:
- # 类的初始化方法
- def __init__(self, name, age):
- self.name = name # 属性
- self.age = age # 属性
-
- # 方法
- def bark(self):
- return f"{self.name} says Woof!"
-
- # 创建对象
- my_dog = Dog("Rex", 5)
- print(my_dog.bark())
Στην Python οι τάξεις περνούν class
Ορισμός λέξης-κλειδιού. Οι συναρτήσεις σε μια κλάση ονομάζονται μέθοδοι και οι μεταβλητές ονομάζονται ιδιότητες.Οι μέθοδοι τάξης συνήθως ξεκινούν μεself
Ως πρώτη παράμετρος, αντιπροσωπεύει το ίδιο το παράδειγμα.
παράδειγμα:
- class Cat:
- def __init__(self, name):
- self.name = name
-
- def meow(self):
- return f"{self.name} says Meow!"
-
- # 创建对象
- my_cat = Cat("Whiskers")
- print(my_cat.meow())
Μια κλάση είναι ένα πρότυπο για ένα αντικείμενο και ορίζει τη δομή και τη συμπεριφορά του αντικειμένου. Τα αντικείμενα είναι στιγμιότυπα κλάσεων και κάθε αντικείμενο έχει ανεξάρτητες ιδιότητες και μεθόδους.
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def greet(self):
- return f"Hello, my name is {self.name} and I am {self.age} years old."
-
- # 创建多个对象
- person1 = Person("Alice", 30)
- person2 = Person("Bob", 25)
-
- print(person1.greet())
- print(person2.greet())
Μια κλάση είναι σαν ένα καλούπι μπισκότων, καθορίζει το σχήμα και το μέγεθος του cookie. Τα αντικείμενα είναι σαν μπισκότα από σκυρόδεμα φτιαγμένα από καλούπι Κάθε μπισκότο μπορεί να έχει διαφορετικές γεύσεις (ιδιότητες), αλλά το σχήμα και το μέγεθός τους (δομή και συμπεριφορά) είναι τα ίδια.
αφηρημένη Αναφέρεται στην απλοποίηση πολύπλοκων προβλημάτων του πραγματικού κόσμου με την αξιοποίηση των κύριων χαρακτηριστικών και την αγνόηση των λεπτομερειών. Στον προγραμματισμό, η αφαίρεση μας βοηθά να δημιουργήσουμε πιο συνοπτικό και διατηρήσιμο κώδικα.
Η αφαίρεση αφορά την εξαγωγή των κύριων χαρακτηριστικών ενός αντικειμένου, ενώ αγνοούνται ασήμαντες λεπτομέρειες. Μέσω της αφαίρεσης, μπορούμε να εστιάσουμε στην βασική λειτουργικότητα ενός αντικειμένου χωρίς να αποσπάται η προσοχή από δευτερεύοντα χαρακτηριστικά.
παράδειγμα:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def make_sound(self):
- pass # 抽象方法,不具体实现
-
- class Dog(Animal):
- def make_sound(self):
- return "Woof!"
-
- class Cat(Animal):
- def make_sound(self):
- return "Meow!"
-
- # 创建对象
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.make_sound())
- print(cat.make_sound())
Στην Python, μπορούμε να επιτύχουμε αφαίρεση ορίζοντας αφηρημένες κλάσεις και αφηρημένες μεθόδους. Οι αφηρημένες τάξεις δεν μπορούν να δημιουργηθούν, μόνο να κληρονομηθούν. Οι αφηρημένες μέθοδοι ορίζονται στην κλάση abstract αλλά υλοποιούνται σε υποκλάσεις.
παράδειγμα:
- from abc import ABC, abstractmethod
-
- class Vehicle(ABC):
- @abstractmethod
- def start_engine(self):
- pass
-
- class Car(Vehicle):
- def start_engine(self):
- return "Car engine started"
-
- class Motorcycle(Vehicle):
- def start_engine(self):
- return "Motorcycle engine started"
-
- # 创建对象
- car = Car()
- motorcycle = Motorcycle()
-
- print(car.start_engine())
- print(motorcycle.start_engine())
Η αφαίρεση είναι σαν να ανάγουμε έναν περίπλοκο πίνακα σε γεωμετρικά σχήματα. Για παράδειγμα, μια συγκεκριμένη γάτα έχει πολλά χαρακτηριστικά (χρώμα τριχώματος, μέγεθος, ηλικία κ.λπ.), αλλά εστιάζουμε μόνο στο χαρακτηριστικό του νιαουρίσματος Αυτό είναι η αφαίρεση της γάτας.
Τάξεις και περιπτώσεις Είναι η βάση του OOP. Οι κλάσεις είναι πρότυπα και οι περιπτώσεις είναι συγκεκριμένα αντικείμενα. Τα στιγμιότυπα δημιουργούνται από μια κλάση και έχουν τις ιδιότητες και τις μεθόδους που ορίζονται από την κλάση.
Ο ορισμός μιας κλάσης και η δημιουργία μιας παρουσίας είναι οι βασικές λειτουργίες του OOP. Οι κλάσεις ορίζουν ιδιότητες και μεθόδους και τα στιγμιότυπα είναι συγκεκριμένα αντικείμενα της κλάσης.
παράδειγμα:
- class Student:
- def __init__(self, name, grade):
- self.name = name
- self.grade = grade
-
- def introduce(self):
- return f"Hi, I am {self.name} and I am in grade {self.grade}."
-
- # 创建实例
- student1 = Student("Alice", 10)
- student2 = Student("Bob", 12)
-
- print(student1.introduce())
- print(student2.introduce())
Τα χαρακτηριστικά μιας κλάσης είναι η κατάσταση του αντικειμένου και οι μέθοδοι είναι η συμπεριφορά του αντικειμένου.Τα χαρακτηριστικά της κλάσης περνούν__init__
Αρχικοποίηση μεθόδου, η μέθοδος ορίζεται στην κλάση.
παράδειγμα:
- class Book:
- def __init__(self, title, author):
- self.title = title
- self.author = author
-
- def get_info(self):
- return f"'{self.title}' by {self.author}"
-
- # 创建实例
- book = Book("1984", "George Orwell")
- print(book.get_info())
Οι τάξεις και οι περιπτώσεις είναι σαν ένα σχέδιο ενός σπιτιού και ενός πραγματικού σπιτιού. Τα σχέδια (τάξεις) ορίζουν τη δομή και τη λειτουργικότητα του σπιτιού, ενώ το πραγματικό σπίτι (παράδειγμα) είναι το συγκεκριμένο αντικείμενο που κατασκευάζεται σύμφωνα με τα σχέδια.
ενθυλάκωση Κρύβει την κατάσταση (ιδιότητες) και τη συμπεριφορά (μέθοδοι) του αντικειμένου μέσα στην κλάση και αλληλεπιδρά με τον έξω κόσμο μέσω της διεπαφής (μέθοδοι). Η ενθυλάκωση βελτιώνει την ασφάλεια και τη συντηρησιμότητα του κώδικα.
Η ενθυλάκωση είναι μία από τις βασικές έννοιες του OOP Προστατεύει τα δεδομένα του αντικειμένου αποκρύπτοντας την εσωτερική κατάσταση του αντικειμένου και εκθέτοντας μόνο τις απαραίτητες διεπαφές. Με αυτόν τον τρόπο, ο εξωτερικός κώδικας δεν μπορεί να έχει άμεση πρόσβαση ή να τροποποιήσει την εσωτερική κατάσταση του αντικειμένου και μπορεί να χειριστεί δεδομένα μόνο μέσω των μεθόδων που παρέχονται από το αντικείμενο.
παράδειγμα:
- class Account:
- def __init__(self, owner, balance=0):
- self.owner = owner
- self.__balance = balance # 私有属性
-
- def deposit(self, amount):
- if amount > 0:
- self.__balance += amount
- else:
- raise ValueError("Deposit amount must be positive")
-
- def withdraw(self, amount):
- if 0 < amount <= self.__balance:
- self.__balance -= amount
- else:
- raise ValueError("Insufficient funds or invalid amount")
-
- def get_balance(self):
- return self.__balance
-
- # 创建实例
- account = Account("John")
- account.deposit(100)
- print(account.get_balance())
Η διεπαφή είναι ο μόνος τρόπος με τον οποίο ένα αντικείμενο αλληλεπιδρά με τον έξω κόσμο. Μέσω των διεπαφών, ο εξωτερικός κώδικας μπορεί να καλέσει τις μεθόδους του αντικειμένου, αλλά δεν μπορεί να έχει άμεση πρόσβαση στην εσωτερική κατάσταση του αντικειμένου.
παράδειγμα:
- class Car:
- def __init__(self, model):
- self.model = model
- self.__engine_started = False
-
- def start_engine(self):
- if not self.__engine_started:
- self.__engine_started = True
- return "Engine started"
- else:
- return "Engine is already running"
-
- def stop_engine(self):
- if self.__engine_started:
- self.__engine_started = False
- return "Engine stopped"
- else:
- return "Engine is not running"
-
- # 创建实例
- car = Car("Toyota")
- print(car.start_engine())
- print(car.stop_engine())
Η συσκευασία είναι σαν το περίβλημα ενός κινητού τηλεφώνου. Τα κυκλώματα και τα εξαρτήματα (κατάσταση του αντικειμένου) μέσα στο κινητό τηλέφωνο είναι εγκλωβισμένα στο περίβλημα.
κληρονομώ Είναι μια άλλη βασική έννοια του OOP, η οποία μας επιτρέπει να δημιουργήσουμε μια νέα κλάση με βάση μια υπάρχουσα κλάση.
Κληρονομικότητα είναι όταν μια κλάση (υποκλάση) αποκτά ιδιότητες και μεθόδους από μια άλλη κλάση (γονική κλάση). Μέσω της κληρονομικότητας, οι υποκλάσεις μπορούν να επαναχρησιμοποιήσουν τον κώδικα της γονικής κλάσης, να προσθέσουν νέες ιδιότητες και μεθόδους ή να παρακάμψουν τις μεθόδους της γονικής κλάσης.
παράδειγμα:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- # 创建实例
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.speak())
- print(cat.speak())
Μια υποκλάση μπορεί να παρακάμψει τη μέθοδο της γονικής κλάσης, δηλαδή να ορίσει μια μέθοδο με το ίδιο όνομα με τη μητρική κλάση στην υποκλάση για την επίτευξη διαφορετικών συναρτήσεων.
παράδειγμα:
- class Shape:
- def area(self):
- return 0
-
- class Rectangle(Shape):
- def __init__(self, width, height):
- self.width = width
- self.height = height
-
- def area(self):
- return self.width * self.height
-
- class Circle(Shape):
- def __init__(self, radius):
- self.radius = radius
-
- def area(self):
- return 3.14 * (self.radius ** 2)
-
- # 创建实例
- rectangle = Rectangle(3, 4)
- circle = Circle(5)
-
- print(rectangle.area())
- print(circle.area())
Η κληρονομιά είναι σαν μια κληρονομιά που δίνουν οι γονείς στα παιδιά τους. Οι γονείς (γονική τάξη) μεταβιβάζουν τις ιδιότητές τους (ιδιότητες και μεθόδους) στα παιδιά τους (υποκατηγορίες) και τα παιδιά μπορούν όχι μόνο να χρησιμοποιήσουν αυτές τις ιδιότητες, αλλά και να γίνουν πλουσιότερα με τις δικές τους προσπάθειες (προσθέτοντας νέες ιδιότητες και μεθόδους).
Πολυμορφισμός Σημαίνει ότι η ίδια μέθοδος έχει διαφορετικές εκδηλώσεις σε διαφορετικά αντικείμενα. Ο πολυμορφισμός μας επιτρέπει να καλούμε μεθόδους διαφορετικών αντικειμένων μέσω της ίδιας διεπαφής για να επιτύχουμε διαφορετικές λειτουργίες.
Ο πολυμορφισμός είναι ένα από τα σημαντικά χαρακτηριστικά του OOP που οδηγεί σε υποκλάση αντικειμένων μέσω αναφορών γονικής κλάσης, επιτρέποντας στην ίδια μέθοδο να έχει διαφορετικές υλοποιήσεις. Ο πολυμορφισμός αυξάνει την ευελιξία και την επεκτασιμότητα του κώδικα.
παράδειγμα:
- class Animal:
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- def animal_sound(animal):
- print(animal.speak())
-
- # 创建实例
- dog = Dog()
- cat = Cat()
-
- animal_sound(dog)
- animal_sound(cat)
Στην Python, ο πολυμορφισμός συνήθως υλοποιείται μέσω της παράκαμψης μεθόδων και των αναφορών γονικής κλάσης. Υποδεικνύοντας το αντικείμενο υποκλάσης μέσω της αναφοράς γονικής κλάσης, μπορείτε να καλέσετε τη μέθοδο υποκλάσης.
παράδειγμα:
- class Shape:
- def draw(self):
- pass
-
- class Rectangle(Shape):
- def draw(self):
- return "Drawing a rectangle"
-
- class Circle(Shape):
- def draw(self):
- return "Drawing a circle"
-
- def draw_shape(shape):
- print(shape.draw())
-
- # 创建实例
- rectangle = Rectangle()
- circle = Circle()
-
- draw_shape(rectangle)
- draw_shape(circle)
Ο πολυμορφισμός είναι σαν ένα τηλεχειριστήριο γενικής χρήσης. Είτε πρόκειται για έλεγχο τηλεόρασης, κλιματιστικού ή στερεοφωνικού ήχου, εφόσον αυτές οι συσκευές έχουν αντίστοιχες διεπαφές (μέθοδοι), το τηλεχειριστήριο (αναφορά γονικής κλάσης) μπορεί να πραγματοποιήσει διαφορετικές λειτουργίες μέσω των ίδιων κουμπιών (κλήσεις μεθόδου).
ενδοσκόπηση Σημαίνει ότι το αντικείμενο μπορεί να γνωρίζει τις δικές του πληροφορίες κατά το χρόνο εκτέλεσης. Η Python παρέχει ορισμένες ενσωματωμένες λειτουργίες για ενδοσκόπηση, όπως π.χtype()
、id()
、hasattr()
Περίμενε.
Η ενδοσκόπηση σημαίνει ότι ένα αντικείμενο μπορεί να αποκτήσει τις δικές του πληροφορίες κατά το χρόνο εκτέλεσης, όπως ιδιότητες, μεθόδους κ.λπ. Η ενδοσκόπηση καθιστά τα προγράμματα της Python εξαιρετικά δυναμικά και ευέλικτα.
παράδειγμα:
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- person = Person("Alice", 30)
-
- # 使用内置函数进行自省
- print(type(person))
- print(hasattr(person, "name"))
- print(getattr(person, "name"))
- setattr(person, "name", "Bob")
- print(person.name)
- delattr(person, "name")
Μέσω της ενδοσκόπησης, μπορούμε να χειριστούμε δυναμικά τις ιδιότητες και τις μεθόδους των αντικειμένων κατά το χρόνο εκτέλεσης, κάνοντας το πρόγραμμα πιο ευέλικτο και δυναμικό.
παράδειγμα:
- class Car:
- def __init__(self, model):
- self.model = model
- self.speed = 0
-
- def accelerate(self):
- self.speed += 5
- return self.speed
-
- car = Car("Toyota")
-
- # 动态操作对象
- if hasattr(car, "accelerate"):
- method = getattr(car, "accelerate")
- print(method())
- print(method())
-
- # 动态设置属性
- setattr(car, "color", "red")
- print(car.color)
Η αυτοεξέταση είναι σαν να κοιτάζεσαι στον καθρέφτη. Μέσω του καθρέφτη (μηχανισμός ενδοσκόπησης), οι άνθρωποι μπορούν να δουν πώς μοιάζουν (ιδιότητες και μέθοδοι αντικειμένων) και να κάνουν προσαρμογές όπως χρειάζεται (δυναμικός χειρισμός αντικειμένων).
στατική μέθοδος καιμέθοδος τάξης είναι μέθοδοι που σχετίζονται με την κλάση, όχι την παρουσία.χρήση στατικής μεθόδου@staticmethod
Διακοσμητής, χρήση μεθόδου τάξης@classmethod
Διακοσμητής.
Μια στατική μέθοδος είναι μια μέθοδος μιας κλάσης, αλλά δεν δεσμεύεται σε καμία περίπτωση κλάσης. Οι στατικές μέθοδοι δεν μπορούν να έχουν πρόσβαση σε στιγμιότυπα μιας κλάσης, ούτε μπορούν να τροποποιήσουν την κατάσταση της κλάσης. Συνήθως χρησιμοποιούνται για την εκτέλεση κάποιας λειτουργίας που δεν έχει καμία σχέση με την κλάση, αλλά λογικά ανήκει στη λειτουργικότητα της κλάσης.
παράδειγμα:
- class Math:
- @staticmethod
- def add(a, b):
- return a + b
-
- print(Math.add(5, 3))
Οι μέθοδοι κλάσης είναι μέθοδοι που συνδέονται με την κλάση και όχι με την παρουσία.Το πρώτο όρισμα σε μια μέθοδο κλάσης είναι η ίδια η κλάση, που συνήθως ονομάζεταιcls
. Οι μέθοδοι κλάσης μπορούν να έχουν πρόσβαση στις ιδιότητες της κλάσης και σε άλλες μεθόδους κλάσης.
παράδειγμα:
- class Math:
- factor = 2
-
- @classmethod
- def multiply(cls, value):
- return cls.factor * value
-
- print(Math.multiply(5))
Όλες οι πτυχές του αντικειμενοστρεφούς προγραμματισμού στην Python, συμπεριλαμβανομένων των βασικών εννοιών του αντικειμενοστρεφούς προγραμματισμού, των αφαιρέσεων, των κλάσεων και των περιπτώσεων, της ενθυλάκωσης, της κληρονομικότητας, του πολυμορφισμού, της ενδοσκόπησης και των στατικών και μεθόδων κλάσης.
Ελπίζω αυτό το λεπτομερές ιστολόγιο να σας βοηθήσει να κατανοήσετε σε βάθος τον αντικειμενοστραφή προγραμματισμό στην Python και να εφαρμόσετε αυτή τη γνώση σε πραγματικά έργα. Εάν έχετε οποιεσδήποτε ερωτήσεις ή χρειάζεστε περαιτέρω βοήθεια, μη διστάσετε να επικοινωνήσετε μαζί μου!