Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเขียนโปรแกรมเชิงวัตถุใน Python?


Python เป็นภาษาโปรแกรมเชิงวัตถุตั้งแต่มีอยู่ คลาสและอ็อบเจ็กต์เป็นส่วนประกอบหลักสองส่วนในการเขียนโปรแกรมเชิงวัตถุ

คลาสสร้างอ็อบเจ็กต์ประเภทใหม่โดยที่อ็อบเจ็กต์เป็นอินสแตนซ์ของคลาส

มาสร้างคลาสที่ง่ายที่สุดกันเถอะ

กำหนดคลาสใน Python

แค่กำหนดคลาสว่าง

#Define a class
class Vehicle():
   pass # An empty block

# Instantiating objects
v = Vehicle()
print(v)

ผลลัพธ์

<__main__.Vehicle object at 0x055DB9F0>

สิ่งที่เราได้ทำข้างต้น?

อันดับแรก เราใช้ class statement เพื่อสร้างคลาส Vehicle ใหม่ ตามด้วยบล็อกข้อความที่เยื้องซึ่งประกอบเป็นเนื้อหาของคลาส ในกรณีของเรา เรามีบล็อกว่างซึ่งถูกฟ้องโดยใช้คำสั่ง pass

ต่อไป ในการใช้คลาสรถ เราได้สร้างอ็อบเจ็กต์/อินสแตนซ์ของคลาสนี้โดยใช้ชื่อของคลาส ตามด้วยวงเล็บ จากนั้นเพื่อยืนยันว่ามีการสร้างวัตถุ เราเพียงแค่พิมพ์และรับข้อมูลที่เรามีอินสแตนซ์ของคลาสรถในโมดูล __main__

Object(v) เป็นตัวอย่างของคลาส แต่ละอ็อบเจ็กต์เฉพาะคืออินสแตนซ์ของคลาสเฉพาะ เราสามารถสร้างอินสแตนซ์ของคลาสได้มากเท่าๆ กัน และมีเมธอดและคุณสมบัติของคลาส

เมธอดและตัวแปรทั้งหมดที่กำหนดไว้ในคลาสสามารถเข้าถึงได้จากอ็อบเจ็กต์

กำหนดเมธอดภายในคลาส

class Vehicle():
   def car(self):
      color = 'Red'
      return color

v = Vehicle()
print(v.car())
print(v)

ผลลัพธ์

Red
<__main__.Vehicle object at 0x05A59690>

วิธีการของอินสแตนซ์

ใน python เมื่อเรากำหนด method ใดๆ ใน class เราจำเป็นต้องจัดเตรียมอาร์กิวเมนต์เริ่มต้นให้กับ method ของ instance ใดๆ ซึ่งก็คือ self หมายความว่าเมื่อเราสร้างวัตถุจากคลาสนั้น วัตถุนั้นเองจะผ่านในวิธีการนั้น

โดยทั่วไป เราไม่ได้ระบุอาร์กิวเมนต์ใดๆ (ตัวเอง) ขณะเรียกใช้ฟังก์ชัน แต่อาร์กิวเมนต์ (ตัวเอง) เป็นสิ่งจำเป็น เมื่อใดก็ตามที่เรากำหนดฟังก์ชันนั้นภายในคลาสนั้น

มาทำความเข้าใจแนวคิดข้างต้นโดยใช้ตัวอย่าง

class myClass():
   def myMethod(self):
      return 'Hello'

myInstance = myClass()
print(myInstance.myMethod())

ผลลัพธ์

Hello

ดังนั้นในโปรแกรมข้างต้น เรากำหนดคลาส myClass และภายในนั้น เราได้กำหนดเมธอด myMethod() และส่งผ่านอาร์กิวเมนต์เดียวที่เรียกว่า self

อย่างไรก็ตาม เมื่อเราเรียกใช้เมธอดผ่านอินสแตนซ์ของคลาส เราไม่มีอาร์กิวเมนต์ใดๆ เนื่องจากเมื่อใดก็ตามที่เราเรียกใช้เมธอดบนอินสแตนซ์ อาร์กิวเมนต์แรกคืออินสแตนซ์ของคลาส

มาแก้ไขหนึ่งบรรทัดจากโปรแกรมด้านบน-

def myMethod():

ฉันเพิ่งลบอาร์กิวเมนต์ (ตัวเอง) ออกจากวิธีการของฉัน (myMethod()) คราวนี้มาเปิดโปรแกรมอีกครั้งและดูว่าเกิดอะไรขึ้น

================ RESTART: C:\Python\Python361\oops_python.py ================
Traceback (most recent call last):
File "C:\Python\Python361\oops_python.py", line 18, in <module>
print(myInstance.myMethod())
TypeError: myMethod() takes 0 positional arguments but 1 was given

ดังนั้นการโต้แย้งครั้งแรกของคุณที่มีต่อวิธีการนี้จึงเป็นเรื่องจำเป็น

คุณสมบัติของอินสแตนซ์

เหล่านี้เป็นแอตทริบิวต์เฉพาะวัตถุที่กำหนดเป็นพารามิเตอร์สำหรับวิธีการ __init__ แต่ละอ็อบเจ็กต์มีค่าต่างกันสำหรับตัวเอง

พิจารณาตัวอย่างด้านล่าง

import random

class myClass():
def myMethod(self):
self.attrib1 = random.randint(1, 11)
self.attrib2 = random.randint(1,21)

myInst = myClass()
myInst.myMethod()

print(myInst.attrib1)
print(myInst.attrib2)

ผลลัพธ์

2
18

ในโปรแกรมข้างต้น “attrib1” และ “attrib2” เป็นแอตทริบิวต์ของอินสแตนซ์

Init Constructor ใน Python

คอนสตรัคเตอร์คือเมธอดประเภทหนึ่งซึ่งใช้ในการเริ่มต้นสมาชิกอินสแตนซ์ของคลาส

ตัวสร้างสามารถเป็นได้สองประเภท−

  • ตัวสร้างแบบกำหนดพารามิเตอร์
  • คอนสตรัคเตอร์ที่ไม่มีพารามิเตอร์

ในไพ ธ อน “__init__” เป็นเมธอดเฉพาะที่เกี่ยวข้องกับคลาสไพธอนทุกคลาส

Python เรียกมันโดยอัตโนมัติสำหรับทุกอ็อบเจ็กต์ที่สร้างจากคลาส จุดประสงค์คือเพื่อเริ่มต้นแอตทริบิวต์คลาสด้วยค่าที่ผู้ใช้ระบุ

มันถูกเรียกว่า constructor ในการเขียนโปรแกรมเชิงวัตถุ

class Employee:
   def __init__(self, name):
      self.name = name
   
   def display(self):
      print("The name of the employee is: ", self.name)
obj1 = Employee('Zack')
obj2 = Employee('Rajesh')
obj3 = Employee('Tashleem')

obj3.display()
obj1.display()

ผลลัพธ์

The name of the employee is: Tashleem
The name of the employee is: Zack

ในโปรแกรมด้านบน เมื่อเราสร้างอินสแตนซ์ (obj1 &obj2) เราส่งชื่ออาร์กิวเมนต์และตัวสร้างจะกำหนดอาร์กิวเมนต์นั้นให้กับแอตทริบิวต์ของอินสแตนซ์

ดังนั้นเมื่อเราเรียกวิธีการแสดงบนอินสแตนซ์ใดอินสแตนซ์หนึ่ง เราก็จะได้ชื่อนั้นมา

การห่อหุ้มใน Python

การเป็น python นั้นมีลักษณะเป็น oop จึงมีวิธีการจำกัดการเข้าถึงเมธอดและตัวแปร

ด้วยการห่อหุ้มข้อมูล เราไม่สามารถแก้ไขแอตทริบิวต์ของอินสแตนซ์ได้โดยตรงโดยการเรียกแอตทริบิวต์บนวัตถุ จะทำให้แอปพลิเคชันของเราเสี่ยงต่อแฮกเกอร์ อย่างไรก็ตาม เราเปลี่ยนเฉพาะค่าแอตทริบิวต์ของอินสแตนซ์โดยเรียกใช้เมธอดเฉพาะเท่านั้น

ตัวอย่าง

class Product:
   def __init__(self):
      self.__maxprice = 1000
      self.__minprice = 1

   def sellingPrice(self):
      print('Our product maximum price is: {}'.format(self.__maxprice))
      print('Our product minimum price is: {}'.format(self.__minprice))

   def productMaxPrice(self, price):
      self.__maxprice = price

def productMinPrice(self, price):
self.__minprice = price

prod1= Product()
prod1.sellingPrice()

prod1.__maxprice = 1500
prod1.sellingPrice()

prod1.__minprice = 10
prod1.sellingPrice()

prod1.productMaxPrice(1500)
prod1.sellingPrice()

prod1.productMinPrice(10)
prod1.sellingPrice()

ผลลัพธ์

Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 10

ในโปรแกรมข้างต้น เราได้สร้างอินสแตนซ์ของคลาส Product และพยายามแก้ไขค่าของตัวแปรอินสแตนซ์ แต่ก็ยังให้ค่าที่ตั้งค่าไว้ภายใน Constructor

วิธีเดียวในการแก้ไขค่าแอตทริบิวต์ของอินสแตนซ์คือการเรียกเมธอด productMaxPrice() หรือ productMinPrice()