2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Sisällysluettelo
1. Olio-ohjelmointikonseptit (OOP)
1.1 Mitä luokat ja objektit ovat?
1.3 Luokkien ja objektien välinen suhde
2.2 Abstraktit luokat ja menetelmät
3.1 Luokkamäärittely ja instantiaatio
3.2 Luokan attribuutit ja menetelmät
5.2 Menetelmän uudelleenkirjoitus
7.2 Itsetutkiskelun käyttö dynaamisissa operaatioissa
8. Staattiset menetelmät ja luokkamenetelmät
Sarake: Python-tutkimusmuistiinpanot
Edellinen osa: Pythonin modularisointi ja pakettien hallinta
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.
- 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:
- 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())
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:
- 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())
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.
- 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())
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.
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.
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:
- 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())
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:
- 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())
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.
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.
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:
- 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())
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:
- 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())
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.
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ä.
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:
- 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())
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:
- 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())
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.
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.
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:
- 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())
Alaluokka voi ohittaa emoluokan menetelmän, eli määrittää menetelmän, jolla on sama nimi kuin alaluokan emoluokka, erilaisten toimintojen saavuttamiseksi.
esimerkki:
- 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())
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ä).
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.
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:
- 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)
Pythonissa polymorfismi toteutetaan yleensä menetelmän ohituksen ja yläluokkaviittausten kautta. Osoittamalla alaluokka-oliota emoluokkaviittauksen kautta voit kutsua alaluokkamenetelmää.
esimerkki:
- 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)
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).
itsetutkiskelu Se tarkoittaa, että objekti voi tietää omat tietonsa ajon aikana. Python tarjoaa joitain sisäänrakennettuja toimintoja itsetutkiskelua varten, kutentype()
、id()
、hasattr()
odota.
Itsetutkiskelu tarkoittaa, että objekti voi saada ajon aikana omia tietojaan, kuten ominaisuuksia, menetelmiä jne. Itsetutkiskelu tekee Python-ohjelmista erittäin dynaamisia ja joustavia.
esimerkki:
- 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")
Itsetutkiskelun avulla voimme dynaamisesti manipuloida objektien ominaisuuksia ja menetelmiä ajon aikana, mikä tekee ohjelmasta joustavamman ja dynaamisemman.
esimerkki:
- 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)
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).
staattinen menetelmä jaluokan menetelmä ovat luokkaan liittyviä menetelmiä, eivät ilmentymiä.staattinen menetelmän käyttö@staticmethod
Sisustaja, luokkamenetelmän käyttö@classmethod
Sisustusarkkitehti.
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:
- class Math:
- @staticmethod
- def add(a, b):
- return a + b
-
- print(Math.add(5, 3))
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:
- class Math:
- factor = 2
-
- @classmethod
- def multiply(cls, value):
- return cls.factor * value
-
- print(Math.multiply(5))
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ä!