Teknologian jakaminen

Tutustu [Python Object-Oriented] ohjelmointiin: Yksityiskohtainen selitys edistyneistä ohjelmointiparadigmoista uudella aikakaudella

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Sisällysluettelo

1. Olio-ohjelmointikonseptit (OOP)

1.1 Mitä luokat ja objektit ovat?

1.2 Luokan määritelmä

1.3 Luokkien ja objektien välinen suhde

1.4 Xiao Li ymmärrys

2. Abstraktio

2.1 Abstraktit käsitteet

2.2 Abstraktit luokat ja menetelmät

2.3 Xiao Li ymmärrystä

3. Luokat ja esiintymät

3.1 Luokkamäärittely ja instantiaatio

3.2 Luokan attribuutit ja menetelmät

3.3 Xiao Li ymmärrys

4. Kapselointi/käyttöliittymä

4.1 Kapseloinnin käsite

4.2 Käyttöliittymän käsite

4.3 Xiao Li ymmärrys

5. Perintö

5.1 Perinnön käsite

5.2 Menetelmän uudelleenkirjoitus

5.3 Xiao Li ymmärrys

6. Polymorfismi

6.1 Polymorfismin käsite

6.2 Toteuta polymorfismi

6.3 Xiao Li ymmärrystä

7. Itsetutkiskelu/reflektio

7.1 Itsetutkiskelun käsite

7.2 Itsetutkiskelun käyttö dynaamisissa operaatioissa

7.3 Xiao Li ymmärrys

8. Staattiset menetelmät ja luokkamenetelmät

8.1 Staattiset menetelmät

8.2 Luokkamenetelmät

Tee yhteenveto


 

Sarake: Python-tutkimusmuistiinpanot

Edellinen osa: Pythonin modularisointi ja pakettien hallinta

1. Olio-ohjelmointikonseptit (OOP)

Olio-ohjelmointi (OOP) On ohjelmointiparadigma, joka toteutetaan järjestämällä ohjelmat objektikokoelmiksi. Objektit eivät sisällä vain dataa, vaan myös menetelmiä tietojen käsittelemiseksi. OOP:n ydinkäsitteitä ovat luokat, objektit, ominaisuudet ja menetelmät.

1.1 Mitä luokat ja objektit ovat?

  • Luokka Onko malli tai suunnitelma, jota käytetään objektien luomiseen. Luokat määrittelevät objektien ominaisuudet ja käyttäytymisen.
  • Esine On esimerkki luokasta. Objektin luominen tarkoittaa tietyn esiintymän luomista luokan perusteella.

esimerkki:

  1. class Dog:
  2. # 类的初始化方法
  3. def __init__(self, name, age):
  4. self.name = name # 属性
  5. self.age = age # 属性
  6. # 方法
  7. def bark(self):
  8. return f"{self.name} says Woof!"
  9. # 创建对象
  10. my_dog = Dog("Rex", 5)
  11. print(my_dog.bark())

1.2 Luokan määritelmä

Pythonissa tunnit kulkevat class Avainsanan määritelmä. Luokan funktioita kutsutaan menetelmiksi ja muuttujia ominaisuuksiksi.Luokkamenetelmät alkavat yleensäself Ensimmäisenä parametrina edustaa itse esiintymää.

esimerkki:

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says Meow!"
  6. # 创建对象
  7. my_cat = Cat("Whiskers")
  8. print(my_cat.meow())

1.3 Luokkien ja objektien välinen suhde

Luokka on objektin mallipohja ja määrittää objektin rakenteen ja käyttäytymisen. Objektit ovat luokkien esiintymiä, ja jokaisella objektilla on itsenäiset ominaisuudet ja menetelmät.

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def greet(self):
  6. return f"Hello, my name is {self.name} and I am {self.age} years old."
  7. # 创建多个对象
  8. person1 = Person("Alice", 30)
  9. person2 = Person("Bob", 25)
  10. print(person1.greet())
  11. print(person2.greet())

1.4 Xiao Li ymmärrys

Luokka on kuin keksimuotti, se määrittää keksin muodon ja koon. Esineet ovat kuin muotista valmistettuja konkreettisia keksejä. Jokaisella keksillä voi olla erilaisia ​​makuja (ominaisuuksia), mutta niiden muoto ja koko (rakenne ja käyttäytyminen) ovat samat.

2. Abstraktio

abstrakti Se viittaa monimutkaisten reaalimaailman ongelmien yksinkertaistamiseen tarttumalla pääpiirteisiin ja jättämällä huomiotta yksityiskohdat. Ohjelmoinnissa abstraktio auttaa meitä luomaan tiiviimpää ja ylläpidettävää koodia.

2.1 Abstraktit käsitteet

Abstraktiolla on kyse kohteen pääpiirteiden poimimisesta jättäen huomiotta merkityksettömät yksityiskohdat. Abstraktion avulla voimme keskittyä kohteen ydintoimintoihin ilman, että toissijaiset ominaisuudet häiritsevät meitä.

esimerkki:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def make_sound(self):
  5. pass # 抽象方法,不具体实现
  6. class Dog(Animal):
  7. def make_sound(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def make_sound(self):
  11. return "Meow!"
  12. # 创建对象
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.make_sound())
  16. print(cat.make_sound())

2.2 Abstraktit luokat ja menetelmät

Pythonissa voimme saavuttaa abstraktion määrittämällä abstrakteja luokkia ja abstrakteja menetelmiä. Abstrakteja luokkia ei voi instantoida, ne vain peritään. Abstraktit menetelmät määritellään abstraktissa luokassa, mutta ne toteutetaan alaluokissa.

esimerkki:

  1. from abc import ABC, abstractmethod
  2. class Vehicle(ABC):
  3. @abstractmethod
  4. def start_engine(self):
  5. pass
  6. class Car(Vehicle):
  7. def start_engine(self):
  8. return "Car engine started"
  9. class Motorcycle(Vehicle):
  10. def start_engine(self):
  11. return "Motorcycle engine started"
  12. # 创建对象
  13. car = Car()
  14. motorcycle = Motorcycle()
  15. print(car.start_engine())
  16. print(motorcycle.start_engine())

2.3 Xiao Li ymmärrystä

Abstraktio on kuin monimutkaisen maalauksen pelkistämistä geometrisiin muotoihin. Esimerkiksi tietyllä kissalla on monia ominaisuuksia (turkin väri, koko, ikä jne.), mutta keskitymme vain meukingiin. Tämä on kissan abstraktio.

3. Luokat ja esiintymät

Luokat ja esiintymät Se on OOP:n perusta. Luokat ovat malleja ja ilmentymät ovat konkreettisia objekteja. Ilmentymät luodaan luokasta ja niillä on luokan määrittämät ominaisuudet ja menetelmät.

3.1 Luokkamäärittely ja instantiaatio

Luokan määrittäminen ja ilmentymän luominen ovat OOP:n perustoimintoja. Luokat määrittelevät ominaisuudet ja menetelmät, ja esiintymät ovat luokan konkreettisia objekteja.

esimerkki:

  1. class Student:
  2. def __init__(self, name, grade):
  3. self.name = name
  4. self.grade = grade
  5. def introduce(self):
  6. return f"Hi, I am {self.name} and I am in grade {self.grade}."
  7. # 创建实例
  8. student1 = Student("Alice", 10)
  9. student2 = Student("Bob", 12)
  10. print(student1.introduce())
  11. print(student2.introduce())

3.2 Luokan attribuutit ja menetelmät

Luokan attribuutit ovat kohteen tila ja menetelmät objektin käyttäytyminen.Luokan attribuutit hyväksytään__init__ Metodin alustus, menetelmä on määritelty luokassa.

esimerkki:

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def get_info(self):
  6. return f"'{self.title}' by {self.author}"
  7. # 创建实例
  8. book = Book("1984", "George Orwell")
  9. print(book.get_info())

3.3 Xiao Li ymmärrys

Luokat ja tapaukset ovat kuin piirustus talosta ja todellisesta talosta. Piirustukset (luokat) määrittelevät talon rakenteen ja toimivuuden, kun taas varsinainen talo (esim.) on piirustusten mukaan rakennettu betonikohde.

4. Kapselointi/käyttöliittymä

kapselointi Se piilottaa objektin tilan (ominaisuudet) ja käyttäytymisen (menetelmät) luokan sisällä ja on vuorovaikutuksessa ulkomaailman kanssa käyttöliittymän (menetelmät) kautta. Kapselointi parantaa koodin turvallisuutta ja ylläpidettävyyttä.

4.1 Kapseloinnin käsite

Kapselointi on yksi OOP:n ydinkonsepteista. Se suojaa objektin tietoja piilottamalla objektin sisäisen tilan ja paljastamalla vain tarvittavat rajapinnat. Tällä tavalla ulkoinen koodi ei voi suoraan käyttää tai muokata objektin sisäistä tilaa, ja se voi käsitellä tietoja vain objektin tarjoamilla menetelmillä.

esimerkki:

  1. class Account:
  2. def __init__(self, owner, balance=0):
  3. self.owner = owner
  4. self.__balance = balance # 私有属性
  5. def deposit(self, amount):
  6. if amount > 0:
  7. self.__balance += amount
  8. else:
  9. raise ValueError("Deposit amount must be positive")
  10. def withdraw(self, amount):
  11. if 0 < amount <= self.__balance:
  12. self.__balance -= amount
  13. else:
  14. raise ValueError("Insufficient funds or invalid amount")
  15. def get_balance(self):
  16. return self.__balance
  17. # 创建实例
  18. account = Account("John")
  19. account.deposit(100)
  20. print(account.get_balance())

4.2 Käyttöliittymän käsite

Käyttöliittymä on ainoa tapa, jolla objekti on vuorovaikutuksessa ulkomaailman kanssa. Liitäntöjen kautta ulkoinen koodi voi kutsua objektin menetelmiä, mutta ei pääse suoraan objektin sisäiseen tilaan.

esimerkki:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.__engine_started = False
  5. def start_engine(self):
  6. if not self.__engine_started:
  7. self.__engine_started = True
  8. return "Engine started"
  9. else:
  10. return "Engine is already running"
  11. def stop_engine(self):
  12. if self.__engine_started:
  13. self.__engine_started = False
  14. return "Engine stopped"
  15. else:
  16. return "Engine is not running"
  17. # 创建实例
  18. car = Car("Toyota")
  19. print(car.start_engine())
  20. print(car.stop_engine())

4.3 Xiao Li ymmärrys

Pakkaus on kuin matkapuhelimen kotelo. Matkapuhelimen sisällä olevat piirit ja komponentit (objektin tila) on kapseloitu koteloon. Käyttäjä voi olla vuorovaikutuksessa matkapuhelimen kanssa vain painikkeiden ja näytön (rajapinnan) kautta, mutta ei voi ottaa yhteyttä suoraan sisäisiin komponentteihin.

5. Perintö

periä On toinen OOP:n ydinkonsepti, jonka avulla voimme luoda uuden luokan olemassa olevan luokan perusteella. Uusi luokka perii kaikki olemassa olevan luokan ominaisuudet ja menetelmät.

5.1 Perinnön käsite

Periytys on, kun yksi luokka (alaluokka) saa ominaisuuksia ja menetelmiä toiselta luokalta (emoluokka). Periytymisen kautta alaluokat voivat käyttää uudelleen emoluokan koodia, lisätä uusia ominaisuuksia ja menetelmiä tai ohittaa emoluokan menetelmät.

esimerkki:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def speak(self):
  11. return "Meow!"
  12. # 创建实例
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.speak())
  16. print(cat.speak())

5.2 Menetelmän uudelleenkirjoitus

Alaluokka voi ohittaa emoluokan menetelmän, eli määrittää menetelmän, jolla on sama nimi kuin alaluokan emoluokka, erilaisten toimintojen saavuttamiseksi.

esimerkki:

  1. class Shape:
  2. def area(self):
  3. return 0
  4. class Rectangle(Shape):
  5. def __init__(self, width, height):
  6. self.width = width
  7. self.height = height
  8. def area(self):
  9. return self.width * self.height
  10. class Circle(Shape):
  11. def __init__(self, radius):
  12. self.radius = radius
  13. def area(self):
  14. return 3.14 * (self.radius ** 2)
  15. # 创建实例
  16. rectangle = Rectangle(3, 4)
  17. circle = Circle(5)
  18. print(rectangle.area())
  19. print(circle.area())

5.3 Xiao Li ymmärrys

Perintö on kuin perintö, jonka vanhemmat ovat antaneet lapsilleen. Vanhemmat (vanhemmat) välittävät omaisuutensa (ominaisuudet ja menetelmät) lapsilleen (alaluokkiin), ja lapset voivat paitsi käyttää näitä ominaisuuksia, myös rikastua omilla ponnisteluilla (lisäämällä uusia ominaisuuksia ja menetelmiä).

6. Polymorfismi

Polymorfismi Se tarkoittaa, että samalla menetelmällä on erilaisia ​​ilmentymiä eri objekteissa. Polymorfismin avulla voimme kutsua eri objektien menetelmiä saman rajapinnan kautta erilaisten toimintojen saavuttamiseksi.

6.1 Polymorfismin käsite

Polymorfismi on yksi OOP:n tärkeistä ominaisuuksista. Se osoittaa alaluokka-objekteihin emoluokkaviittausten kautta, mikä mahdollistaa saman menetelmän eri toteutukset. Polymorfismi lisää koodin joustavuutta ja skaalautuvuutta.

esimerkki:

  1. class Animal:
  2. def speak(self):
  3. pass
  4. class Dog(Animal):
  5. def speak(self):
  6. return "Woof!"
  7. class Cat(Animal):
  8. def speak(self):
  9. return "Meow!"
  10. def animal_sound(animal):
  11. print(animal.speak())
  12. # 创建实例
  13. dog = Dog()
  14. cat = Cat()
  15. animal_sound(dog)
  16. animal_sound(cat)

 

6.2 Toteuta polymorfismi

Pythonissa polymorfismi toteutetaan yleensä menetelmän ohituksen ja yläluokkaviittausten kautta. Osoittamalla alaluokka-oliota emoluokkaviittauksen kautta voit kutsua alaluokkamenetelmää.

esimerkki:

  1. class Shape:
  2. def draw(self):
  3. pass
  4. class Rectangle(Shape):
  5. def draw(self):
  6. return "Drawing a rectangle"
  7. class Circle(Shape):
  8. def draw(self):
  9. return "Drawing a circle"
  10. def draw_shape(shape):
  11. print(shape.draw())
  12. # 创建实例
  13. rectangle = Rectangle()
  14. circle = Circle()
  15. draw_shape(rectangle)
  16. draw_shape(circle)

 

6.3 Xiao Li ymmärrystä

Polymorfismi on kuin yleinen kaukosäädin. Olipa kyseessä television, ilmastointilaitteen tai stereon ohjaaminen, niin kauan kuin näillä laitteilla on vastaavat liitännät (menetelmät), kaukosäädin (vanhemman luokkaviite) voi toteuttaa erilaisia ​​toimintoja samoilla painikkeilla (menetelmäkutsut).

7. Itsetutkiskelu/reflektio

itsetutkiskelu Se tarkoittaa, että objekti voi tietää omat tietonsa ajon aikana. Python tarjoaa joitain sisäänrakennettuja toimintoja itsetutkiskelua varten, kutentype()id()hasattr() odota.

7.1 Itsetutkiskelun käsite

Itsetutkiskelu tarkoittaa, että objekti voi saada ajon aikana omia tietojaan, kuten ominaisuuksia, menetelmiä jne. Itsetutkiskelu tekee Python-ohjelmista erittäin dynaamisia ja joustavia.

esimerkki:

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. person = Person("Alice", 30)
  6. # 使用内置函数进行自省
  7. print(type(person))
  8. print(hasattr(person, "name"))
  9. print(getattr(person, "name"))
  10. setattr(person, "name", "Bob")
  11. print(person.name)
  12. delattr(person, "name")

7.2 Itsetutkiskelun käyttö dynaamisissa operaatioissa

Itsetutkiskelun avulla voimme dynaamisesti manipuloida objektien ominaisuuksia ja menetelmiä ajon aikana, mikä tekee ohjelmasta joustavamman ja dynaamisemman.

esimerkki:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.speed = 0
  5. def accelerate(self):
  6. self.speed += 5
  7. return self.speed
  8. car = Car("Toyota")
  9. # 动态操作对象
  10. if hasattr(car, "accelerate"):
  11. method = getattr(car, "accelerate")
  12. print(method())
  13. print(method())
  14. # 动态设置属性
  15. setattr(car, "color", "red")
  16. print(car.color)

7.3 Xiao Li ymmärrys

Itsetutkiskelu on kuin peiliin katsominen. Peilin (itsetutkiskelumekanismi) kautta ihmiset näkevät miltä he näyttävät (objektien ominaisuudet ja menetelmät) ja voivat tehdä tarvittavia säätöjä (objektien dynaaminen manipulointi).

8. Staattiset menetelmät ja luokkamenetelmät

staattinen menetelmä jaluokan menetelmä ovat luokkaan liittyviä menetelmiä, eivät ilmentymiä.staattinen menetelmän käyttö@staticmethod Sisustaja, luokkamenetelmän käyttö@classmethod Sisustusarkkitehti.

8.1 Staattiset menetelmät

Staattinen menetelmä on luokan metodi, mutta se ei ole sidottu mihinkään luokkainstanssiin. Staattiset menetelmät eivät voi käyttää luokan esiintymiä, eivätkä ne voi muuttaa luokan tilaa. Niitä käytetään yleensä suorittamaan jokin operaatio, jolla ei ole mitään tekemistä luokan kanssa, mutta joka loogisesti kuuluu luokan toimivuuteen.

esimerkki:

  1. class Math:
  2. @staticmethod
  3. def add(a, b):
  4. return a + b
  5. print(Math.add(5, 3))

 

8.2 Luokkamenetelmät

Luokkamenetelmät ovat menetelmiä, jotka on sidottu luokkaan eikä ilmentymään.Luokkametodin ensimmäinen argumentti on itse luokka, yleensä nimeltääncls . Luokkamenetelmät voivat käyttää luokan ja muiden luokkamenetelmien ominaisuuksia.

esimerkki:

  1. class Math:
  2. factor = 2
  3. @classmethod
  4. def multiply(cls, value):
  5. return cls.factor * value
  6. print(Math.multiply(5))

Tee yhteenveto

Pythonin olio-ohjelmoinnin kaikki näkökohdat, mukaan lukien olio-ohjelmoinnin peruskäsitteet, abstraktiot, luokat ja esiintymät, kapselointi, periytyminen, polymorfismi, itsetutkiskelu sekä staattiset ja luokkamenetelmät.

Toivon, että tämä yksityiskohtainen blogi auttaa sinua ymmärtämään syvällisesti Pythonin olioohjelmointia ja soveltamaan tätä tietoa todellisissa projekteissa. Jos sinulla on kysyttävää tai tarvitset lisäapua, ota rohkeasti yhteyttä!