Tôi có thể học OOP với Python không?

Lập trình là một nghệ thuật. Và cũng như trong nghệ thuật, việc lựa chọn cọ và màu sơn thích hợp là điều cần thiết để tạo ra những tác phẩm đẹp nhất. Lập trình hướng đối tượng Python là một trong những kỹ năng như vậy

Chọn ngôn ngữ lập trình phù hợp là một phần quan trọng của bất kỳ dự án nào và nó có thể dẫn đến sự phát triển trôi chảy và thú vị hoặc là một cơn ác mộng hoàn toàn. Do đó, sẽ là tốt nhất nếu bạn sử dụng ngôn ngữ phù hợp nhất cho trường hợp sử dụng của mình

Đó là lý do chính để học lập trình hướng đối tượng bằng Python, đây cũng là một trong những ngôn ngữ lập trình phổ biến nhất

hãy học

Một chương trình Python mẫu

Trước khi đi sâu vào vấn đề, chúng ta hãy đặt ra một câu hỏi. bạn đã bao giờ viết một chương trình Python như chương trình bên dưới chưa?

secret_number = 20
 
while True:
   number = input('Guess the number: ')
 
   try:
       number = int(number)
   except:
       print('Sorry that is not a number')
       continue
 
   if number != secret_number:
       if number > secret_number:
           print(number, 'is greater than the secret number')
 
       elif number < secret_number:
           print(number, 'is less than the secret number')
   else:
       print('You guessed the number:', secret_number)
       break

Mã này là một công cụ đoán số đơn giản. Hãy thử sao chép nó trong tệp Python và chạy nó trong hệ thống của bạn. Nó hoàn thành xuất sắc mục đích của nó

Kinsta chiều chuộng tôi đến mức bây giờ tôi yêu cầu mức độ dịch vụ đó từ mọi nhà cung cấp. Chúng tôi cũng cố gắng đạt được mức đó với sự hỗ trợ của công cụ SaaS

Tôi có thể học OOP với Python không?
Suganthan Mohanadasan từ @Suganthanmn
Xem kế hoạch

Nhưng ở đây có một vấn đề lớn. điều gì sẽ xảy ra nếu chúng tôi yêu cầu bạn triển khai một tính năng mới?

“Nếu đầu vào là bội số của số bí mật, hãy cung cấp cho người dùng một gợi ý. ”

Chương trình sẽ nhanh chóng trở nên phức tạp và nặng nề khi bạn tăng số lượng tính năng và do đó, tổng số điều kiện lồng nhau

Đó chính xác là vấn đề lập trình hướng đối tượng cố gắng giải quyết

Lập trình là một nghệ thuật đòi hỏi phải có các công cụ phù hợp để tạo ra thứ gì đó đẹp đẽ 🎨 Tìm hiểu thêm về Lập trình hướng đối tượng Python tại đây 👇Nhấp để Tweet

Yêu cầu để học Python OOP

Trước khi bắt đầu lập trình hướng đối tượng, chúng tôi thực sự khuyên bạn nên nắm vững kiến ​​thức cơ bản về Python

Phân loại các chủ đề được coi là “cơ bản” có thể khó khăn. Vì điều này, chúng tôi đã thiết kế một cheat sheet với tất cả các khái niệm chính cần thiết để học lập trình Hướng đối tượng trong Python

  • Biến đổi. Tên tượng trưng trỏ đến một đối tượng cụ thể (chúng ta sẽ xem ý nghĩa của các đối tượng thông qua bài viết)
  • toán tử số học. Phép cộng (+), phép trừ (-), phép nhân (*), phép chia (/), phép chia số nguyên (//), modulo (%)
  • Các kiểu dữ liệu tích hợp. Số (số nguyên, số float, phức), Chuỗi (chuỗi, danh sách, bộ dữ liệu), Boolean (Đúng, Sai), Từ điển và Bộ
  • biểu thức Boolean. Biểu thức trong đó kết quả là Đúng hoặc Sai
  • có điều kiện. Đánh giá một biểu thức boolean và thực hiện một số quy trình tùy thuộc vào kết quả. Xử lý bằng câu lệnh if/else
  • Vòng. Thực hiện lặp đi lặp lại các khối mã. Nó có thể là vòng lặp for hoặc while
  • Chức năng. Khối mã có tổ chức và có thể tái sử dụng. Bạn tạo chúng với từ khóa def
  • Tranh luận. Các đối tượng được truyền cho một chức năng. Ví dụ.
    class Coffee:
            # Constructor
            def __init__(self, name, price):
                    self.name = name
                    self.price = float(price)
            def check_budget(self, budget):
                    # Check if the budget is valid
                    if not isinstance(budget, (int, float)):
                            print('Enter float or int')
                            exit()
                    if budget < 0: 
                        print('Sorry you don\'t have money') 
                        exit() 
            def get_change(self, budget):
                    return budget - self.price
            
            def sell(self, budget):
                    self.check_budget(budget)
                    if budget >= self.price:
                            print(f'You can buy the {self.name} coffee')
                            if budget == self.price:
                                    print('It\'s complete')
                            else:
                                    print(f'Here is your change {self.get_change(budget)}$')
    
                            exit('Thanks for your transaction')
    
    8
  • Run a Python script: Open a terminal or command line and type “python .”
  • Mở vỏ Python. Mở một thiết bị đầu cuối và gõ
    class Coffee:
            # Constructor
            def __init__(self, name, price):
                    self.name = name
                    self.price = float(price)
            def check_budget(self, budget):
                    # Check if the budget is valid
                    if not isinstance(budget, (int, float)):
                            print('Enter float or int')
                            exit()
                    if budget < 0: 
                        print('Sorry you don\'t have money') 
                        exit() 
            def get_change(self, budget):
                    return budget - self.price
            
            def sell(self, budget):
                    self.check_budget(budget)
                    if budget >= self.price:
                            print(f'You can buy the {self.name} coffee')
                            if budget == self.price:
                                    print('It\'s complete')
                            else:
                                    print(f'Here is your change {self.get_change(budget)}$')
    
                            exit('Thanks for your transaction')
    
    9 hoặc
    small = Coffee('Small', 2)
    regular = Coffee('Regular', 5)
    big = Coffee('Big', 6)
     
    try:
       user_budget = float(input('What is your budget? '))
    except ValueError:
       exit('Please enter a number')
      
    for coffee in [big, regular, small]:
       coffee.sell(user_budget)
    
    0 tùy thuộc vào hệ thống của bạn

Bây giờ bạn đã nắm rõ các khái niệm này, bạn có thể tiếp tục tìm hiểu về lập trình hướng đối tượng

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

Lập trình hướng đối tượng (OOP) là một mô hình lập trình trong đó chúng ta có thể nghĩ về các vấn đề phức tạp như các đối tượng

Một mô hình là một lý thuyết cung cấp cơ sở để giải quyết các vấn đề

Vì vậy, khi nói về OOP, chúng ta đang đề cập đến một tập hợp các khái niệm và mẫu mà chúng ta sử dụng để giải quyết vấn đề với các đối tượng

Một đối tượng trong Python là một tập hợp dữ liệu (thuộc tính) và hành vi (phương thức). Bạn có thể nghĩ về các đồ vật như những thứ có thật xung quanh bạn. Ví dụ, xem xét máy tính

Tôi có thể học OOP với Python không?
Một máy tính có thể là một đối tượng

Như bạn có thể nhận thấy, dữ liệu (thuộc tính) luôn là danh từ, trong khi hành vi (phương thức) luôn là động từ

Sự ngăn cách này là khái niệm trung tâm của Lập trình hướng đối tượng. Bạn xây dựng các đối tượng lưu trữ dữ liệu và chứa các loại chức năng cụ thể

Tại sao chúng ta sử dụng lập trình hướng đối tượng trong Python?

OOP cho phép bạn tạo phần mềm an toàn và đáng tin cậy. Nhiều người sử dụng mô hình này để xây dựng cơ sở mã của họ. Một số ví dụ là Django, Kivy, gấu trúc, NumPy và TensorFlow

Hãy xem những ưu điểm chính của việc sử dụng OOP trong Python

Ưu điểm của Python OOP

Những lý do sau đây sẽ khiến bạn chọn sử dụng lập trình hướng đối tượng trong Python

Tất cả các ngôn ngữ lập trình hiện đại đều sử dụng OOP

Mô hình này không phụ thuộc vào ngôn ngữ. Nếu bạn học OOP trong Python, bạn sẽ có thể sử dụng nó trong phần sau

  • Java
  • PHP (đảm bảo đọc phần so sánh giữa PHP và Python)
  • hồng ngọc
  • Javascript
  • C#
  • Kotlin

Tất cả các ngôn ngữ này đều hướng đối tượng hoặc bao gồm các tùy chọn cho chức năng hướng đối tượng. Nếu bạn muốn học bất kỳ ngôn ngữ nào sau Python, điều đó sẽ dễ dàng hơn — bạn sẽ tìm thấy nhiều điểm tương đồng giữa các ngôn ngữ làm việc với các đối tượng

OOP cho phép bạn viết mã nhanh hơn

Viết mã nhanh hơn không có nghĩa là viết ít dòng mã hơn. Điều đó có nghĩa là bạn có thể triển khai nhiều tính năng hơn trong thời gian ngắn hơn mà không ảnh hưởng đến tính ổn định của dự án

Lập trình hướng đối tượng cho phép bạn sử dụng lại mã bằng cách triển khai. Nguyên tắc này làm cho mã của bạn ngắn gọn và dễ đọc hơn

Như bạn có thể biết, các lập trình viên dành nhiều thời gian hơn để đọc mã hơn là viết nó. Đó là lý do mức độ dễ đọc luôn quan trọng hơn việc đưa ra các tính năng càng nhanh càng tốt

Tôi có thể học OOP với Python không?
Năng suất giảm với mã không rõ ràng

Bạn sẽ thấy nhiều hơn về nguyên tắc trừu tượng sau

OOP giúp bạn tránh Spaghetti Code

Bạn có nhớ chương trình đoán số ở đầu bài viết này không?

Nếu bạn tiếp tục thêm các tính năng, bạn sẽ có nhiều câu lệnh if lồng nhau trong tương lai. Chuỗi mã dài vô tận này được gọi là mã spaghetti và bạn nên tránh nó càng nhiều càng tốt

OOP cho chúng ta khả năng nén tất cả logic trong các đối tượng, do đó tránh được các đoạn if lồng nhau dài

OOP cải thiện phân tích của bạn về mọi tình huống

Khi bạn có một số kinh nghiệm với OOP, bạn sẽ có thể coi các vấn đề là các đối tượng nhỏ và cụ thể

Sự hiểu biết này dẫn đến việc khởi tạo dự án nhanh chóng

Lập trình có cấu trúc vs Lập trình hướng đối tượng

Lập trình có cấu trúc là mô hình được người mới bắt đầu sử dụng nhiều nhất vì đây là cách đơn giản nhất để xây dựng một chương trình nhỏ

Nó liên quan đến việc chạy một chương trình Python một cách tuần tự. Điều đó có nghĩa là bạn đang đưa cho máy tính một danh sách các tác vụ và sau đó thực hiện chúng từ trên xuống dưới

Hãy xem một ví dụ về lập trình có cấu trúc với chương trình quán cà phê

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)

Đoạn mã trên hoạt động như một nhà cung cấp quán cà phê. Nó sẽ hỏi bạn về ngân sách, sau đó “bán” cho bạn loại cà phê lớn nhất mà bạn có khả năng mua

Hãy thử chạy nó trong thiết bị đầu cuối. Nó sẽ thực hiện từng bước, tùy thuộc vào đầu vào của bạn

Mã này hoạt động hoàn hảo, nhưng chúng tôi có ba vấn đề

  1. Nó có rất nhiều logic lặp đi lặp lại
  2. Nó sử dụng nhiều điều kiện if lồng nhau
  3. Sẽ khó đọc và sửa đổi

OOP được phát minh như một giải pháp cho tất cả những vấn đề này

Hãy xem chương trình trên được triển khai với OOP. Đừng lo nếu bạn chưa hiểu. Nó chỉ dùng để so sánh giữa lập trình cấu trúc và lập trình hướng đối tượng

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')

Ghi chú. Tất cả các khái niệm sau đây sẽ được giải thích sâu hơn thông qua bài viết

Đoạn mã trên đại diện cho một lớp có tên là “Cà phê. ” Nó có hai thuộc tính — “tên” và “giá” — và cả hai đều được sử dụng trong các phương thức. Phương thức chính là “bán”, xử lý tất cả logic cần thiết để hoàn tất quy trình bán hàng

Nếu bạn cố chạy lớp đó, bạn sẽ không nhận được bất kỳ kết quả nào. Nó chủ yếu xảy ra bởi vì chúng tôi chỉ khai báo “mẫu” cho cà phê chứ không phải bản thân cà phê

Hãy triển khai lớp đó với đoạn mã sau

small = Coffee('Small', 2)
regular = Coffee('Regular', 5)
big = Coffee('Big', 6)
 
try:
   user_budget = float(input('What is your budget? '))
except ValueError:
   exit('Please enter a number')
  
for coffee in [big, regular, small]:
   coffee.sell(user_budget)

Ở đây, chúng tôi đang tạo các thể hiện hoặc đối tượng cà phê của lớp “Cà phê”, sau đó gọi phương thức “bán” của từng loại cà phê cho đến khi người dùng có thể mua bất kỳ tùy chọn nào

Chúng tôi sẽ nhận được cùng một đầu ra với cả hai cách tiếp cận, nhưng chúng tôi có thể mở rộng chức năng chương trình tốt hơn nhiều với OOP

Dưới đây là bảng so sánh lập trình hướng đối tượng và lập trình cấu trúc

OOPSLập trình có cấu trúcDễ bảo trìKhó bảo trìCách tiếp cận Không lặp lại chính mình (DRY)Mã lặp lại ở nhiều nơiCác đoạn mã nhỏ được sử dụng lại ở nhiều nơiMột lượng lớn mã ở một số nơiCách tiếp cận đối tượngCách tiếp cận mã khốiDễ gỡ lỗiKhó gỡ lỗiĐường cong học tập lớnĐường cong học tập đơn giản hơnĐược sử dụng trong các dự án lớnĐược tối ưu hóa cho các chương trình đơn giản

Để kết luận so sánh mô hình

  • Không có mô hình nào là hoàn hảo (OOP có thể quá sức để sử dụng trong các dự án đơn giản)
  • Đây chỉ là hai cách để giải quyết vấn đề;
  • OOP được sử dụng trong các cơ sở mã lớn, trong khi lập trình có cấu trúc chủ yếu dành cho các dự án đơn giản

Hãy chuyển sang các đối tượng tích hợp trong Python

Mọi thứ đều là đối tượng trong Python

Chúng tôi sẽ cho bạn biết một bí mật. bạn đã sử dụng OOP mọi lúc mà không nhận ra điều đó

Ngay cả khi sử dụng các mô hình khác trong Python, bạn vẫn sử dụng các đối tượng để làm hầu hết mọi thứ

Đó là bởi vì, trong Python, mọi thứ đều là một đối tượng

Ghi nhớ định nghĩa đối tượng. Một đối tượng trong Python là một tập hợp dữ liệu (thuộc tính) và hành vi (phương thức)

Phù hợp với bất kỳ loại dữ liệu nào trong Python

Chuỗi là tập hợp dữ liệu (ký tự) và hành vi (trên (), dưới (), v.v. ). Điều tương tự cũng áp dụng cho số nguyên, số float, booleans, danh sách và từ điển

Trước khi tiếp tục, hãy xem lại ý nghĩa của các thuộc tính và phương thức

Thuộc tính và phương thức

Các thuộc tính là các biến nội bộ bên trong các đối tượng, trong khi các phương thức là các hàm tạo ra một số hành vi

Hãy làm một bài tập đơn giản trong trình bao Python. Bạn có thể mở nó bằng cách gõ

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
9 hoặc
small = Coffee('Small', 2)
regular = Coffee('Regular', 5)
big = Coffee('Big', 6)
 
try:
   user_budget = float(input('What is your budget? '))
except ValueError:
   exit('Please enter a number')
  
for coffee in [big, regular, small]:
   coffee.sell(user_budget)
0 trong thiết bị đầu cuối của mình

Tôi có thể học OOP với Python không?
Vỏ trăn

Bây giờ, hãy làm việc với trình bao Python để khám phá các phương thức và kiểu

>>> kinsta = 'Kinsta, Premium Application, Database, and Managed WordPress hosting'
>>> kinsta.upper()
'KINSTA, PREMIUM APPLICATION, DATABASE, AND MANAGED WORDPRESS HOSTING'

Ở dòng thứ hai, chúng ta đang gọi một phương thức chuỗi, upper(). Nó trả về nội dung của chuỗi tất cả bằng chữ hoa. Tuy nhiên, nó không thay đổi biến ban đầu

>>> kinsta
'Kinsta, Premium Application, Database, and Managed WordPress hosting'

Hãy đi sâu vào các chức năng có giá trị khi làm việc với các đối tượng

Hàm type() cho phép bạn lấy kiểu của một đối tượng. “Loại” là lớp mà đối tượng thuộc về

>>> type(kinsta)
# class 'str'

Hàm dir() trả về tất cả các thuộc tính và phương thức của một đối tượng. Hãy kiểm tra nó với biến kinsta

>>> dir(kinsta)
['__add__', '__class__',  .......... 'upper', 'zfill']

Bây giờ, hãy thử in một số thuộc tính ẩn của đối tượng này

 >>> kinsta.__class__ # class ‘str’ e>

Điều này sẽ xuất ra lớp mà đối tượng kinsta thuộc về. Vì vậy, chúng ta có thể nói điều duy nhất mà hàm loại trả về là thuộc tính __class__ của một đối tượng

Bạn có thể thử nghiệm với tất cả các loại dữ liệu, khám phá tất cả các thuộc tính và phương thức của chúng trực tiếp trên thiết bị đầu cuối. Bạn có thể tìm hiểu thêm về các loại dữ liệu tích hợp trong tài liệu chính thức

Triển khai ứng dụng của bạn lên Kinsta - Bắt đầu với Khoản tín dụng $20 ngay bây giờ

Chạy nút của bạn. js, Python, Go, PHP, Ruby, Java và Scala, (hoặc hầu hết mọi ứng dụng khác nếu bạn sử dụng Dockerfiles tùy chỉnh của riêng mình), trong ba bước đơn giản

Triển khai ngay bây giờ và nhận $20 giảm giá

Đối tượng đầu tiên của bạn trong Python

Một lớp giống như một khuôn mẫu. Nó cho phép bạn tạo các đối tượng tùy chỉnh dựa trên các thuộc tính và phương thức bạn xác định

Bạn có thể coi nó như một công cụ cắt bánh quy mà bạn sửa đổi để nướng những chiếc bánh quy hoàn hảo (đối tượng, không phải bánh quy theo dõi), với các đặc điểm đã xác định. Hình dạng, Kích thước, v.v.

Mặt khác, chúng ta có những trường hợp. Một thể hiện là một đối tượng riêng lẻ của một lớp, có một địa chỉ bộ nhớ duy nhất

Tôi có thể học OOP với Python không?
Các trường hợp trong Python

Bây giờ bạn đã biết lớp và thể hiện là gì, hãy định nghĩa một số

Để định nghĩa một lớp trong Python, bạn sử dụng từ khóa lớp, theo sau là tên của nó. Trong trường hợp này, bạn sẽ tạo một lớp có tên là Cookie

Ghi chú. Trong Python, chúng tôi sử dụng để đặt tên cho các lớp

class Cookie:
	pass

Mở vỏ Python của bạn và nhập mã ở trên. Để tạo một thể hiện của một lớp, chỉ cần nhập tên của nó và dấu ngoặc đơn sau nó. Đó là quá trình tương tự như gọi một chức năng

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
0

Xin chúc mừng — bạn vừa tạo đối tượng đầu tiên của mình bằng Python. Bạn có thể kiểm tra id của nó và nhập bằng mã sau

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
1

Như bạn có thể thấy, cookie này có một mã định danh duy nhất trong bộ nhớ và loại của nó là Cookie

Bạn cũng có thể kiểm tra xem một đối tượng có phải là một thể hiện của một lớp hay không bằng hàm isinstance()

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
2

Phương thức xây dựng

Phương thức __init__() còn có tên là “constructor. ” Nó được gọi là Python mỗi khi chúng ta khởi tạo một đối tượng

Tạo trạng thái ban đầu của đối tượng với bộ tham số tối thiểu mà nó cần tồn tại. Hãy sửa đổi lớp Cookie để nó chấp nhận các tham số trong hàm tạo của nó

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
3

Trong lớp Cookie, mọi cookie phải có tên, hình dạng và chip. Chúng tôi đã định nghĩa cái cuối cùng là “Sôcôla. ”

Mặt khác, self đề cập đến thể hiện của lớp (chính đối tượng)

Hãy thử dán lớp vào trình bao và tạo một phiên bản cookie như bình thường

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
4

Bạn sẽ gặp lỗi. Đó là bởi vì bạn phải cung cấp tập dữ liệu tối thiểu mà đối tượng cần để tồn tại — trong trường hợp này là tên và hình dạng vì chúng tôi đã đặt chip thành “Sôcôla. ”

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
5

Để truy cập các thuộc tính của một thể hiện, bạn phải sử dụng ký hiệu dấu chấm

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
6

Hiện tại, lớp Cookie không có gì quá hấp dẫn. Hãy thêm một phương thức mẫu bake() để làm cho mọi thứ thú vị hơn

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
7

Để gọi một phương thức, hãy sử dụng ký hiệu dấu chấm và gọi nó như một hàm

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
8

4 Trụ cột của OOP trong Python

Lập trình hướng đối tượng bao gồm bốn trụ cột chính

1. trừu tượng

Trừu tượng ẩn chức năng bên trong của một ứng dụng từ người dùng. Người dùng có thể là khách hàng cuối hoặc các nhà phát triển khác

Chúng ta có thể tìm thấy sự trừu tượng trong cuộc sống hàng ngày của chúng ta. Ví dụ: bạn biết cách sử dụng điện thoại của mình, nhưng có thể bạn không biết chính xác điều gì đang xảy ra bên trong nó mỗi khi bạn mở một ứng dụng

Cần một giải pháp lưu trữ mang lại cho bạn lợi thế cạnh tranh? . Kiểm tra kế hoạch của chúng tôi

Một ví dụ khác là chính Python. Bạn biết cách sử dụng nó để xây dựng phần mềm chức năng và bạn có thể làm điều đó ngay cả khi bạn không hiểu hoạt động bên trong của Python

Áp dụng điều tương tự cho mã cho phép bạn thu thập tất cả các đối tượng trong một vấn đề và chức năng tiêu chuẩn trừu tượng thành các lớp

2. Di sản

Tính kế thừa cho phép chúng ta định nghĩa nhiều lớp con từ một lớp đã được định nghĩa

Mục đích chính của nó là tuân theo nguyên tắc DRY. Bạn sẽ có thể sử dụng lại nhiều mã bằng cách triển khai tất cả các thành phần chia sẻ thành các lớp cha

Bạn có thể coi đó là khái niệm thực tế về di truyền. Con (lớp con) là kết quả của sự thừa kế giữa hai cha mẹ (lớp cha). Chúng kế thừa tất cả các đặc điểm vật lý (thuộc tính) và một số hành vi chung (phương thức)

3. đa hình

Tính đa hình cho phép chúng ta sửa đổi một chút các phương thức và thuộc tính của các lớp con được định nghĩa trước đó trong lớp cha

Nghĩa đen là “nhiều hình thức. ” Đó là bởi vì chúng tôi xây dựng các phương thức có cùng tên nhưng chức năng khác nhau

Quay trở lại ý tưởng trước đó, trẻ em cũng là một ví dụ hoàn hảo về tính đa hình. Họ có thể kế thừa một hành vi đã xác định get_hungry() nhưng theo một cách hơi khác, chẳng hạn như đói sau mỗi 4 giờ thay vì 6 giờ một lần

4. đóng gói

Đóng gói là quá trình chúng tôi bảo vệ tính toàn vẹn bên trong của dữ liệu trong một lớp

Mặc dù không có câu lệnh riêng trong Python, nhưng bạn có thể áp dụng đóng gói bằng cách sử dụng. Có các phương thức đặc biệt có tên getters và setters cho phép chúng ta truy cập các thuộc tính và phương thức duy nhất

Hãy tưởng tượng một lớp Người có một thuộc tính duy nhất có tên _height. Bạn chỉ có thể sửa đổi thuộc tính này trong một số giới hạn nhất định (gần như không thể cao hơn 3 mét)

Xây dựng Máy tính Bộ giải Hình dạng Diện tích

Một trong những điều tốt nhất về Python là nó cho phép chúng ta tạo ra nhiều loại phần mềm, từ chương trình CLI (giao diện dòng lệnh) đến ứng dụng web phức tạp.

Bây giờ bạn đã học các khái niệm cơ bản của OOP, đã đến lúc áp dụng chúng vào một dự án thực tế

Ghi chú. Tất cả các mã sau sẽ có sẵn trong kho lưu trữ GitHub này. A giúp chúng tôi quản lý các phiên bản mã với Git

Nhiệm vụ của bạn là lập bảng tính diện tích các hình sau

  • Quảng trường
  • hình chữ nhật
  • Tam giác
  • Vòng tròn
  • Hình lục giác

Lớp cơ sở hình dạng

Đầu tiên, tạo một máy tính tập tin. py và mở nó. Vì chúng ta đã có các đối tượng để làm việc, nên sẽ dễ dàng trừu tượng hóa chúng trong một lớp

Bạn có thể phân tích các đặc điểm chung và phát hiện ra rằng tất cả chúng đều là hình dạng 2D. Do đó, tùy chọn tốt nhất là tạo một lớp Hình dạng với phương thức get_area() mà mỗi hình dạng sẽ kế thừa từ đó

Ghi chú. Tất cả các phương pháp nên là động từ. Đó là bởi vì phương thức này được đặt tên là get_area() chứ không phải area()

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It\'s complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It\'s complete')
       else:
           print('Your change is', user_budget - small)
9

Đoạn mã trên định nghĩa lớp;

Hãy triển khai chức năng tiêu chuẩn của hầu hết các hình dạng này

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
0

Hãy chia nhỏ những gì chúng ta đang làm với mã này

  • Trong phương thức __init__, chúng tôi đang yêu cầu hai tham số, side1 và side2. Chúng sẽ vẫn là thuộc tính cá thể
  • Hàm get_area() trả về diện tích của hình. Trong trường hợp này, nó sử dụng công thức tính diện tích hình chữ nhật vì nó sẽ dễ thực hiện hơn với các hình khác
  • Phương thức __str__() là một “phương thức ma thuật” giống như __init__(). Nó cho phép bạn sửa đổi cách một phiên bản sẽ in
  • cái tôi. __tầng lớp__. __name__ thuộc tính ẩn đề cập đến tên của lớp. Nếu bạn đang làm việc với một lớp Triangle, thuộc tính đó sẽ là “Triangle. ”

Lớp chữ nhật

Vì chúng ta đã triển khai công thức tính diện tích của Hình chữ nhật, nên chúng ta có thể tạo một lớp Hình chữ nhật đơn giản không làm gì ngoài việc kế thừa từ lớp Hình dạng

Để áp dụng tính kế thừa trong Python, bạn sẽ tạo một lớp như bình thường và bao quanh lớp cha mà bạn muốn kế thừa bằng dấu ngoặc đơn

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
1

Lớp vuông

Chúng ta có thể thực hiện một cách tiếp cận tuyệt vời đối với tính đa hình với lớp Square

Hãy nhớ rằng hình vuông chỉ là hình chữ nhật có bốn cạnh bằng nhau. Điều đó có nghĩa là chúng ta có thể sử dụng cùng một công thức để tính diện tích

Chúng ta có thể làm điều này bằng cách sửa đổi phương thức init, chỉ chấp nhận một cạnh làm tham số và chuyển giá trị cạnh đó cho hàm tạo của lớp Hình chữ nhật

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
2

Như bạn có thể thấy, tham số bên chuyển hai lần cho lớp cha. Nói cách khác, nó chuyển cả side1 và side2 sang hàm tạo được xác định trước đó

Lớp tam giác

Một hình tam giác lớn bằng một nửa hình chữ nhật bao quanh nó

Tôi có thể học OOP với Python không?
Quan hệ giữa hình tam giác và hình chữ nhật (Nguồn ảnh. gia sư đại học)

Do đó, chúng ta có thể kế thừa từ lớp Rectangle và sửa đổi phương thức get_area để phù hợp với công thức diện tích tam giác, bằng một nửa đáy nhân với chiều cao

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
3

Một trường hợp sử dụng khác của hàm super() là gọi một phương thức được định nghĩa trong lớp cha và lưu kết quả dưới dạng một biến. Đó là những gì đang xảy ra bên trong phương thức get_area()

Lớp vòng tròn

Bạn có thể tìm diện tích hình tròn bằng công thức πr², với r là bán kính hình tròn. Điều đó có nghĩa là chúng ta phải sửa đổi phương thức get_area() để triển khai công thức đó

Ghi chú. Chúng ta có thể nhập giá trị gần đúng của π từ mô-đun toán học

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
4

Đoạn mã trên định nghĩa lớp Circle, lớp này sử dụng hàm tạo khác và phương thức get_area()

Mặc dù Circle kế thừa từ lớp Shape, nhưng bạn có thể định nghĩa lại từng phương thức và gán cho nó theo ý thích của mình

Lớp lục giác thông thường

Chúng ta chỉ cần độ dài của một cạnh của một hình lục giác đều để tính diện tích của nó. Nó tương tự như lớp Square, nơi chúng ta chỉ truyền một đối số cho hàm tạo

Tôi có thể học OOP với Python không?
Công thức diện tích hình lục giác (Nguồn ảnh. BYJU'S)

Tuy nhiên, công thức hoàn toàn khác, và nó ngụ ý việc sử dụng căn bậc hai. Đó là lý do tại sao bạn sẽ sử dụng hàm sqrt() từ mô-đun toán học

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
5

Kiểm tra các lớp học của chúng tôi

Bạn có thể vào chế độ tương tác khi chạy tệp Python bằng trình gỡ lỗi. Cách đơn giản nhất để thực hiện việc này là sử dụng chức năng tích hợp sẵn

Ghi chú. Chức năng này chỉ khả dụng trong Python 3. 7 hoặc mới hơn

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
6

Bây giờ, hãy chạy tệp Python và chơi xung quanh với các lớp bạn đã tạo

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don\'t have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It\'s complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')
7

Thách đấu

Tạo một lớp với một phương thức chạy nơi người dùng có thể chọn một hình dạng và tính diện tích của nó

Khi bạn đã hoàn thành thử thách, bạn có thể gửi yêu cầu kéo tới repo GitHub hoặc xuất bản giải pháp của mình trong phần nhận xét

Bạn đã sẵn sàng bắt đầu học lập trình hướng đối tượng trong Python chưa? Click to Tweet

Tóm lược

Lập trình hướng đối tượng là một mô hình trong đó chúng ta giải quyết vấn đề bằng cách coi chúng là đối tượng. Nếu bạn hiểu Python OOP, bạn cũng có thể áp dụng nó dễ dàng bằng các ngôn ngữ như , PHP, Javascript và

Trong bài viết này, bạn đã học về

  • Khái niệm hướng đối tượng trong Python
  • Ưu điểm của hướng đối tượng so với lập trình có cấu trúc
  • Khái niệm cơ bản về lập trình hướng đối tượng trong Python
  • Khái niệm về lớp và cách sử dụng chúng trong Python
  • Hàm tạo của một lớp trong Python
  • Phương thức và thuộc tính trong Python
  • Bốn trụ cột của OOP
  • Thực hiện trừu tượng hóa, kế thừa và đa hình trong một dự án

Bây giờ nó kết thúc với bạn

Nếu bạn thích hướng dẫn này, hãy xem bài đăng của chúng tôi về Hướng dẫn Python

Hãy cho chúng tôi biết giải pháp của bạn cho thử thách bên dưới trong phần bình luận. Và đừng quên xem hướng dẫn so sánh của chúng tôi giữa Python và PHP


Nhận tất cả các ứng dụng, cơ sở dữ liệu và trang web WordPress của bạn trực tuyến và dưới một mái nhà. Nền tảng đám mây hiệu suất cao, đầy đủ tính năng của chúng tôi bao gồm

  • Dễ dàng thiết lập và quản lý trong bảng điều khiển MyKinsta
  • Hỗ trợ chuyên gia 24/7
  • Mạng và phần cứng Google Cloud Platform tốt nhất, được cung cấp bởi Kubernetes để có khả năng mở rộng tối đa
  • Tích hợp Cloudflare cấp doanh nghiệp cho tốc độ và bảo mật
  • Tiếp cận đối tượng toàn cầu với tối đa 35 trung tâm dữ liệu và hơn 275 PoP trên toàn thế giới

Hãy tự kiểm tra với $20 trong tháng đầu tiên của Lưu trữ ứng dụng hoặc Lưu trữ cơ sở dữ liệu. Khám phá kế hoạch của chúng tôi hoặc nói chuyện với bộ phận bán hàng để tìm thấy sự phù hợp nhất của bạn

Python có tốt cho việc học OOP không?

Python là ngôn ngữ lập trình tuyệt vời hỗ trợ OOP . Bạn sẽ sử dụng nó để định nghĩa một lớp với các thuộc tính và phương thức, sau đó bạn sẽ gọi. Python cung cấp một số lợi ích so với các ngôn ngữ lập trình khác như Java, C++ hoặc R.

Python hay Java tốt hơn cho OOP?

Cả Java và Python đều hỗ trợ triển khai OOP , nhưng chúng thực hiện theo những cách khác nhau. Thiết kế – Java được thiết kế để trở thành một ngôn ngữ OOP thuần túy, trong đó mọi thứ đều là một lớp (một mẫu tạo ra các thể hiện hoặc đối tượng). Python hỗ trợ OOP, nhưng nó cũng có thể chạy mã ở chế độ tập lệnh mà không cần khai báo bất kỳ lớp nào.

OOP trong Python có khó không?

OOP Python rất khó .

Cái nào tốt hơn cho OOP C++ hay Python?

C++ nhanh hơn khi được biên dịch so với python . Python chậm hơn vì nó sử dụng trình thông dịch và xác định kiểu dữ liệu khi chạy. Thật khó để duy trì. Cú pháp giống C, các tính năng OOP mạnh mẽ bao gồm quá tải toán tử và trình tối ưu hóa thời gian biên dịch tốt nhất đều có sẵn.