Computer >> Máy Tính >  >> Lập trình >> Python

Lập trình hướng đối tượng trong Python?

Python đã là một ngôn ngữ lập trình hướng đối tượng kể từ khi tồn tại. Lớp và đối tượng là hai khối xây dựng chính của lập trình hướng đối tượng.

Một lớp tạo ra một kiểu đối tượng mới trong đó các đối tượng là các thể hiện của lớp.

Hãy tạo một trong những lớp đơn giản nhất,

Xác định một lớp trong Python

Hãy chỉ xác định một lớp trống.

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

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

Kết quả

<__main__.Vehicle object at 0x055DB9F0>

Chúng tôi đã làm gì ở trên?

Vì vậy, trước tiên, chúng ta sử dụng câu lệnh lớp để tạo lớp Xe mới, theo sau là một khối câu lệnh thụt vào tạo thành phần thân của lớp. Trong trường hợp của chúng tôi, chúng tôi có một khối trống được định nghĩa bằng cách sử dụng câu lệnh vượt qua.

Tiếp theo, để sử dụng lớp Xe, chúng ta đã tạo một đối tượng / cá thể của lớp này bằng cách sử dụng tên của lớp theo sau bởi một cặp dấu ngoặc đơn. Sau đó, để xác nhận đối tượng đã được tạo, chúng tôi chỉ cần in nó và lấy thông tin rằng chúng tôi có một phiên bản của lớp Xe trong mô-đun __main__.

Đối tượng (v) là một thể hiện của một lớp. Mỗi đối tượng cụ thể là một thể hiện của một lớp cụ thể. Chúng ta có thể tạo nhiều thể hiện của một lớp và chứa các phương thức và thuộc tính của lớp.

Tất cả các phương thức và biến được định nghĩa bên trong lớp đều có thể truy cập được đối với các đối tượng của nó.

Xác định phương thức bên trong lớp

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

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

Kết quả

Red
<__main__.Vehicle object at 0x05A59690>

Phương thức phiên bản

Trong python, khi chúng ta xác định bất kỳ phương thức nào trong một lớp, chúng ta cần cung cấp một đối số mặc định cho bất kỳ phương thức cá thể nào, đối số này là chính nó. Nó có nghĩa là khi chúng ta tạo một đối tượng từ lớp đó, chính đối tượng đó sẽ truyền vào phương thức đó.

Nói chung, chúng tôi không cung cấp bất kỳ đối số (self) nào trong khi gọi hàm, nhưng đối số (self) là bắt buộc, bất cứ khi nào chúng tôi xác định hàm đó bên trong lớp đó.

Hãy hiểu khái niệm trên bằng cách sử dụng ví dụ.

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

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

Kết quả

Hello

Vì vậy, trong chương trình trên, chúng tôi định nghĩa một lớp myClass và bên trong nó, chúng tôi định nghĩa một phương thức myMethod () và chỉ truyền một đối số được gọi là self.

Tuy nhiên, khi chúng ta gọi phương thức thông qua thể hiện của một lớp, chúng ta không cung cấp bất kỳ đối số nào cho nó. Điều này là do bất cứ khi nào chúng ta gọi phương thức trên một cá thể, bản thân đối số đầu tiên là một thể hiện của một lớp.

Hãy sửa đổi một dòng từ chương trình trên-

def myMethod():

Tôi chỉ xóa đối số (self) khỏi phương thức của tôi (myMethod ()). Bây giờ chúng ta hãy chạy lại chương trình và xem điều gì đã xảy ra.

================ 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

Vì vậy, bắt buộc đối số đầu tiên của bạn đối với phương thức là một đối số.

Thuộc tính phiên bản

Đây là các thuộc tính dành riêng cho đối tượng được định nghĩa là tham số của phương thức __init__. Mỗi đối tượng có thể có các giá trị khác nhau cho chính chúng.

Hãy xem xét ví dụ dưới đây,

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)

Kết quả

2
18

Trong chương trình trên, “do 1” và “thuộc tính 2” là các thuộc tính phiên bản.

Init Constructor trong Python

Hàm tạo là một kiểu phương thức cụ thể được sử dụng để khởi tạo các thành viên cá thể của lớp.

Các trình xây dựng có thể có hai loại−

  • Hàm tạo được tham số hóa
  • Hàm tạo không tham số

Trong python, “__init__” là một phương thức duy nhất được liên kết với mọi lớp python.

Python tự động gọi nó cho mọi đối tượng được tạo từ lớp. Mục đích của nó là khởi tạo các thuộc tính lớp với các giá trị do người dùng cung cấp.

Nó được gọi là hàm tạo trong lập trình hướng đối tượng.

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()

Kết quả

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

Trong chương trình trên, khi chúng ta tạo một cá thể (obj1 &obj2), chúng ta chuyển đối số tên và hàm tạo sẽ gán đối số đó cho thuộc tính cá thể.

Vì vậy, khi chúng tôi gọi phương thức hiển thị trên một phiên bản cụ thể, chúng tôi sẽ nhận được tên cụ thể.

Đóng gói trong Python

Bản chất là python đang hoạt động, nó cung cấp một cách để hạn chế quyền truy cập vào các phương thức và biến.

Với tính năng đóng gói dữ liệu tại chỗ, chúng ta không thể sửa đổi trực tiếp thuộc tính cá thể bằng cách gọi một thuộc tính trên đối tượng. Nó sẽ làm cho ứng dụng của chúng ta dễ bị tin tặc tấn công. Tuy nhiên, chúng tôi chỉ thay đổi các giá trị thuộc tính cá thể bằng cách gọi phương thức cụ thể.

Ví dụ

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()

Kết quả

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

Trong chương trình trên, chúng tôi đã tạo một phiên bản của lớp Sản phẩm và cố gắng sửa đổi giá trị của biến cá thể, nhưng nó vẫn cung cấp giá trị được đặt bên trong hàm tạo.

Chỉ có cách sửa đổi giá trị của thuộc tính phiên bản là gọi phương thức productMaxPrice () hoặc productMinPrice ().