Học oop trong python có tốt không?

Mô-đun này sẽ hướng dẫn bạn cách mô hình hóa các vấn đề bằng cách sử dụng các khái niệm lập trình hướng đối tượng (OOP). Bạn cũng sẽ học cách biến mô hình của mình thành mã làm việc bằng cách sử dụng các khái niệm OOP như lớp, thuộc tính và phương thức

[Lớp là yếu tố then chốt trong lập trình Python. Nó là cơ sở cho hầu hết mọi dự án và thư viện nổi tiếng mà chúng tôi sử dụng để phân tích dữ liệu và thậm chí cả thư viện chuẩn Python. Hiểu các lớp là gì, khi nào sử dụng chúng và làm thế nào chúng có thể có giá trị trong tất cả các nỗ lực phân tích dữ liệu của bạn là mục tiêu của bài viết này. Trong lúc này, chúng ta sẽ tìm hiểu thuật ngữ Lập trình hướng đối tượng nghĩa là gì và cách nó tích hợp với các lớp Python

Vì vậy, những gì chính xác là các lớp học? . Là sự phân loại của bất cứ điều gì. Ví dụ, Mèo (loài) có thể được coi là một lớp. Mỗi lớp có các thuộc tính và chức năng nhất định của riêng nó, điều này cũng có thể được quan sát thấy ở mọi con mèo. Tất cả các con mèo đều có các thuộc tính như giống, tuổi, chiều cao, cân nặng, màu sắc và các chức năng như ăn, ngủ, cào ghế, v.v. Vì vậy, mỗi cá thể mèo tồn tại trên thế giới này có thể được coi là một đối tượng của lớp mèo

Làm thế nào điều này giúp bất cứ ai? . Điều này cũng đúng trong trường hợp này. Nếu bạn viết mã một tập hợp thao tác nhất định mà bạn thực hiện trên các tập dữ liệu khác nhau. Bạn có thể sử dụng các lớp và định nghĩa tất cả các hàm trong lớp đó, sau đó sử dụng đối tượng của lớp đó để thực hiện lặp đi lặp lại cùng một tác vụ mà không phải viết lại mã nhiều lần. Bây giờ, tất cả những điều này không gây ngạc nhiên cho bất kỳ ai đã từng làm việc trong một số không gian phát triển/lập trình trước đây.

dog_breed[10] = 'Golden Retriever'  # Breed of Dog 10
dog_weight[10] = 57.5  # Weight (lbs) of Dog 10

Trên đây là một đoạn mã mà bạn sẽ sử dụng để xác định riêng giống chó và trọng lượng. Mã tương tự trở nên thuận tiện và mạnh mẽ hơn rất nhiều khi bạn định nghĩa dog là một lớp và sau đó sử dụng các đối tượng của nó để đặt tham số

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5

Đôi khi bạn muốn giữ một số loại dữ liệu nhất định trong một nhóm để bạn có thể xác định loại dữ liệu đó thuộc về loại nào. Đó là nơi bạn sử dụng các lớp để nhóm dữ liệu và chức năng của mình lại với nhau thành các lớp riêng biệt

Tương tự, ngay cả các hàm cũng đáng được xác định trong mô hình OOP thay vì chỉ xác định một hàm mỗi khi bạn muốn thực hiện một số thao tác trên dữ liệu. Hãy cùng xem ví dụ sau

Nếu bạn phân loại các hành động sẽ được thực hiện trên các bộ dữ liệu khác nhau trong các lớp khác nhau thì nó sẽ như thế này

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 

Trong ví dụ trên, bạn có thể thấy rằng hai thao tác giống nhau được thực hiện trên hai bộ dữ liệu khác nhau có thể được phân loại tốt hơn với OOP. Phần lớn đây vẫn là một kiểu giới thiệu cơ sở cảm ứng rất cơ bản về OOP trong python. Có nhiều thứ để học luôn. Tận dụng một số tài nguyên có sẵn trực tuyến để củng cố thêm kiến ​​thức và kỹ năng của bạn về OOP với python

Vui lòng để lại nhận xét, đề xuất và phản hồi của bạn về bài đăng này. Tôi rất thích thực hiện bất kỳ thay đổi tích cực nào trong phong cách viết của mình và tôi có bất kỳ chủ đề nào mà bạn cảm thấy mình có thể viết được, xin vui lòng kết nối với tôi và chia sẻ. Tôi luôn ở ngoài đó cố gắng học hỏi và chia sẻ nhiều nhất có thể. Cảm ơn bạn đã dành thời gian quý báu để đọc qua. Tạm biệt

Lập trình hướng đối tượng (OOP) là một phương pháp cấu trúc chương trình bằng cách gộp các thuộc tính và hành vi có liên quan vào các đối tượng riêng lẻ. Trong hướng dẫn này, bạn sẽ tìm hiểu những kiến ​​thức cơ bản về lập trình hướng đối tượng trong Python

Về mặt khái niệm, các đối tượng giống như các thành phần của một hệ thống. Hãy nghĩ về một chương trình như một loại dây chuyền lắp ráp của nhà máy. Tại mỗi bước của dây chuyền lắp ráp, một thành phần hệ thống sẽ xử lý một số vật liệu, cuối cùng biến nguyên liệu thô thành sản phẩm hoàn chỉnh

Một đối tượng chứa dữ liệu, chẳng hạn như nguyên liệu thô hoặc đã được xử lý trước ở mỗi bước trên dây chuyền lắp ráp và hành vi, chẳng hạn như hành động mà mỗi thành phần dây chuyền lắp ráp thực hiện

Trong hướng dẫn này, bạn sẽ học cách

  • Tạo một lớp giống như một bản thiết kế để tạo một đối tượng
  • Sử dụng các lớp để tạo đối tượng mới
  • Hệ thống mô hình với kế thừa lớp

Ghi chú. Hướng dẫn này được chuyển thể từ chương “Lập trình hướng đối tượng (OOP)” trong Python Basics. Giới thiệu thực tế về Python 3

Cuốn sách sử dụng trình soạn thảo IDLE tích hợp sẵn của Python để tạo và chỉnh sửa các tệp Python cũng như tương tác với trình bao Python, do đó, thỉnh thoảng bạn sẽ thấy các tham chiếu đến IDLE trong suốt hướng dẫn này. Tuy nhiên, bạn sẽ không gặp vấn đề gì khi chạy mã ví dụ từ trình chỉnh sửa và môi trường bạn chọn

Tiền thưởng miễn phí. Nhấp vào đây để có quyền truy cập vào Bảng cheat Python OOP miễn phí chỉ cho bạn các hướng dẫn, video và sách hay nhất để tìm hiểu thêm về Lập trình hướng đối tượng với Python

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

Lập trình hướng đối tượng là một mô hình lập trình cung cấp phương tiện cấu trúc chương trình sao cho các thuộc tính và hành vi được gộp vào các đối tượng riêng lẻ

Chẳng hạn, một đối tượng có thể đại diện cho một người với các thuộc tính như tên, tuổi, địa chỉ và các hành vi như đi bộ, nói chuyện, thở và chạy. Hoặc nó có thể đại diện cho một email có các thuộc tính như danh sách người nhận, chủ đề và nội dung cũng như các hành vi như thêm tệp đính kèm và gửi

Nói cách khác, lập trình hướng đối tượng là một cách tiếp cận để mô hình hóa các sự vật cụ thể, trong thế giới thực, như ô tô, cũng như mối quan hệ giữa các sự vật, như công ty và nhân viên, học sinh và giáo viên, v.v. OOP mô hình hóa các thực thể trong thế giới thực dưới dạng các đối tượng phần mềm có một số dữ liệu được liên kết với chúng và có thể thực hiện các chức năng nhất định

Một mô hình lập trình phổ biến khác là lập trình thủ tục, cấu trúc một chương trình giống như một công thức trong đó nó cung cấp một tập hợp các bước, dưới dạng các hàm và khối mã, chạy tuần tự để hoàn thành một tác vụ

Điểm mấu chốt là các đối tượng nằm ở trung tâm của lập trình hướng đối tượng trong Python, không chỉ đại diện cho dữ liệu, như trong lập trình thủ tục, mà còn trong cấu trúc tổng thể của chương trình.

Loại bỏ các quảng cáo

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

Các cấu trúc dữ liệu nguyên thủy—như số, chuỗi và danh sách—được thiết kế để biểu diễn các mẩu thông tin đơn giản, chẳng hạn như giá của một quả táo, tên một bài thơ hoặc màu sắc yêu thích của bạn, tương ứng. Nếu bạn muốn đại diện cho một cái gì đó phức tạp hơn thì sao?

Ví dụ: giả sử bạn muốn theo dõi nhân viên trong một tổ chức. Bạn cần lưu trữ một số thông tin cơ bản về từng nhân viên như tên, tuổi, chức vụ, năm bắt đầu làm việc

Một cách để làm điều này là đại diện cho mỗi nhân viên như một danh sách

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]

Có một số vấn đề với cách tiếp cận này

Đầu tiên, nó có thể làm cho các tệp mã lớn khó quản lý hơn. Nếu bạn tham khảo

>>> class Dog:
..     pass
5 cách xa nơi khai báo danh sách
>>> class Dog:
..     pass
6 vài dòng, bạn có nhớ rằng phần tử có chỉ số
>>> class Dog:
..     pass
7 là tên của nhân viên không?

Thứ hai, nó có thể gây ra lỗi nếu không phải mọi nhân viên đều có cùng số phần tử trong danh sách. Trong danh sách

>>> class Dog:
..     pass
8 ở trên, tuổi bị thiếu, vì vậy
>>> class Dog:
..     pass
9 sẽ trả về
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
00 thay vì Dr. tuổi của McCoy

Một cách tuyệt vời để làm cho loại mã này dễ quản lý hơn và dễ bảo trì hơn là sử dụng các lớp

Các lớp so với các trường hợp

Các lớp được sử dụng để tạo cấu trúc dữ liệu do người dùng định nghĩa. Các lớp định nghĩa các hàm được gọi là các phương thức, xác định các hành vi và hành động mà một đối tượng được tạo từ lớp có thể thực hiện với dữ liệu của nó

Trong hướng dẫn này, bạn sẽ tạo một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 lưu trữ một số thông tin về các đặc điểm và hành vi mà một con chó có thể có

Một lớp là một kế hoạch chi tiết về cách một cái gì đó nên được xác định. Nó không thực sự chứa bất kỳ dữ liệu nào. Lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 chỉ định rằng tên và tuổi là cần thiết để xác định một con chó, nhưng nó không chứa tên hoặc tuổi của bất kỳ con chó cụ thể nào

Trong khi lớp là bản thiết kế, thì một thể hiện là một đối tượng được xây dựng từ một lớp và chứa dữ liệu thực. Một thể hiện của lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 không còn là bản thiết kế nữa. Đó là một con chó thực sự có tên, như Miles, bốn tuổi

Nói cách khác, một lớp giống như một biểu mẫu hoặc bảng câu hỏi. Một ví dụ giống như một biểu mẫu đã được điền thông tin. Giống như nhiều người có thể điền vào cùng một biểu mẫu với thông tin duy nhất của riêng họ, nhiều trường hợp có thể được tạo từ một lớp duy nhất

Cách xác định một lớp

Tất cả các định nghĩa lớp bắt đầu bằng từ khóa

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
04, theo sau là tên của lớp và dấu hai chấm. Bất kỳ mã nào được thụt vào bên dưới định nghĩa lớp được coi là một phần của nội dung lớp

Đây là một ví dụ về lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
6

Phần thân của lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 bao gồm một câu lệnh đơn. từ khóa
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
07.
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
07 thường được sử dụng làm trình giữ chỗ cho biết mã cuối cùng sẽ đi đến đâu. Nó cho phép bạn chạy mã này mà Python không báo lỗi

Ghi chú. Tên lớp Python được viết bằng ký hiệu CapitalizedWords theo quy ước. Ví dụ: một lớp dành cho một giống chó cụ thể như Jack Russell Terrier sẽ được viết là

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09

Lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 hiện không thú vị lắm, vì vậy hãy cải thiện nó một chút bằng cách xác định một số thuộc tính mà tất cả các đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 nên có. Có một số thuộc tính mà chúng ta có thể chọn, bao gồm tên, tuổi, màu lông và giống. Để giữ cho mọi thứ đơn giản, chúng tôi sẽ chỉ sử dụng tên và tuổi

Các thuộc tính mà tất cả các đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 phải có được định nghĩa trong một phương thức có tên là
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43. Mỗi khi một đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới được tạo,
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 sẽ đặt trạng thái ban đầu của đối tượng bằng cách gán các giá trị thuộc tính của đối tượng. Nghĩa là,
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 khởi tạo từng thể hiện mới của lớp

Bạn có thể cung cấp cho

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 bất kỳ số lượng tham số nào, nhưng tham số đầu tiên sẽ luôn là một biến có tên là
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



48. Khi một thể hiện lớp mới được tạo, thể hiện đó sẽ tự động được chuyển đến tham số
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



48 trong
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 để có thể xác định các thuộc tính mới trên đối tượng

Hãy cập nhật lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 bằng một phương thức
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 để tạo các thuộc tính
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
43 và
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
44

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
6

Lưu ý rằng chữ ký của phương thức

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 được thụt vào bốn khoảng trắng. Phần thân của phương thức được thụt vào bởi tám khoảng trắng. Dấu đầu dòng này cực kỳ quan trọng. Nó nói với Python rằng phương thức
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 thuộc về lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

Trong phần thân của

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43, có hai câu lệnh sử dụng biến
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



48

  1. kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    20 tạo một thuộc tính có tên là
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    21 và gán cho nó giá trị của tham số
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    21
  2. kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    23 tạo một thuộc tính có tên là
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    24 và gán cho nó giá trị của tham số
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    24

Thuộc tính được tạo trong

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 được gọi là thuộc tính thể hiện. Giá trị của một thuộc tính thể hiện là dành riêng cho một thể hiện cụ thể của lớp. Tất cả các đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 đều có tên và tuổi, nhưng các giá trị cho thuộc tính
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
21 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
24 sẽ khác nhau tùy thuộc vào phiên bản
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

Mặt khác, thuộc tính lớp là thuộc tính có cùng giá trị cho tất cả các thể hiện của lớp. Bạn có thể xác định thuộc tính lớp bằng cách gán giá trị cho tên biến bên ngoài

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43

Ví dụ: lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 sau đây có thuộc tính lớp được gọi là
>>> class Dog:
..     pass
53 với giá trị
>>> class Dog:
..     pass
54

>>> class Dog:
..     pass
7

Các thuộc tính của lớp được xác định trực tiếp bên dưới dòng đầu tiên của tên lớp và được thụt vào bởi bốn khoảng trắng. Chúng phải luôn được gán một giá trị ban đầu. Khi một thể hiện của lớp được tạo, các thuộc tính của lớp sẽ tự động được tạo và gán cho các giá trị ban đầu của chúng

Sử dụng các thuộc tính của lớp để xác định các thuộc tính phải có cùng giá trị cho mọi thể hiện của lớp. Sử dụng thuộc tính phiên bản cho các thuộc tính thay đổi từ phiên bản này sang phiên bản khác

Bây giờ chúng ta có một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, hãy tạo một số con chó

Loại bỏ các quảng cáo

Khởi tạo một đối tượng trong Python

Mở cửa sổ tương tác của IDLE và gõ như sau

>>>

>>> class Dog:
..     pass

Điều này tạo ra một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới không có thuộc tính hoặc phương thức

Tạo một đối tượng mới từ một lớp được gọi là khởi tạo một đối tượng. Bạn có thể khởi tạo một đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới bằng cách nhập tên của lớp, tiếp theo là mở và đóng dấu ngoặc đơn

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
0

Bây giờ bạn có một đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới tại
>>> class Dog:
..     pass
59. Chuỗi ký tự và số trông buồn cười này là một địa chỉ bộ nhớ cho biết nơi lưu trữ đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 trong bộ nhớ máy tính của bạn. Lưu ý rằng địa chỉ bạn nhìn thấy trên màn hình sẽ khác

Bây giờ khởi tạo một đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 thứ hai

>>>

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



4

Phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới được đặt tại một địa chỉ bộ nhớ khác. Đó là bởi vì nó là một thể hiện hoàn toàn mới và hoàn toàn độc nhất so với đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 đầu tiên mà bạn đã khởi tạo

Để xem điều này theo cách khác, hãy gõ như sau

>>>

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
4

Trong mã này, bạn tạo hai đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới và gán chúng cho các biến
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
605 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
606. Khi bạn so sánh
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
605 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
606 bằng cách sử dụng toán tử ________ 1609, kết quả là ________ 1610. Mặc dù
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
605 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
606 đều là thể hiện của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, nhưng chúng đại diện cho hai đối tượng riêng biệt trong bộ nhớ

Thuộc tính lớp và trường hợp

Bây giờ hãy tạo một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới với thuộc tính lớp có tên là
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
615 và hai thuộc tính thể hiện có tên là
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
43 và
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
44

>>>

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
2

Để khởi tạo các đối tượng của lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 này, bạn cần cung cấp các giá trị cho lớp
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
21 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
24. Nếu bạn không làm như vậy, thì Python sẽ tăng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
621

>>>

>>> class Dog:
..     pass
5

Để truyền đối số cho tham số

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
21 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
24, hãy đặt giá trị vào dấu ngoặc đơn sau tên lớp

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
60

Điều này tạo ra hai phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mới—một dành cho chú chó chín tuổi tên Buddy và một dành cho chú chó bốn tuổi tên Miles

Phương thức

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 có ba tham số, vậy tại sao chỉ có hai đối số được truyền cho nó trong ví dụ?

Khi bạn khởi tạo một đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, Python sẽ tạo một thể hiện mới và chuyển nó tới tham số đầu tiên của
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43. Về cơ bản, điều này loại bỏ tham số
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



48, vì vậy bạn chỉ cần lo lắng về tham số
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
21 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
24

Sau khi tạo phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, bạn có thể truy cập các thuộc tính phiên bản của chúng bằng cách sử dụng ký hiệu dấu chấm

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
61

Bạn có thể truy cập các thuộc tính của lớp theo cùng một cách

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
62

Một trong những lợi thế lớn nhất của việc sử dụng các lớp để tổ chức dữ liệu là các phiên bản được đảm bảo có các thuộc tính mà bạn mong đợi. Tất cả các phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 đều có các thuộc tính
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
615,
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
43 và
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
44, vì vậy bạn có thể yên tâm sử dụng các thuộc tính đó khi biết rằng chúng sẽ luôn trả về một giá trị

Mặc dù các thuộc tính được đảm bảo tồn tại nhưng giá trị của chúng có thể thay đổi linh hoạt

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
63

Trong ví dụ này, bạn thay đổi thuộc tính

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
44 của đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
638 thành
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
639. Sau đó, bạn thay đổi thuộc tính
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
615 của đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641 thành
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
642, là một loài mèo. Điều đó khiến Miles trở thành một con chó khá kỳ lạ, nhưng nó hợp lệ Python

Điểm mấu chốt ở đây là các đối tượng tùy chỉnh có thể thay đổi theo mặc định. Một đối tượng có thể thay đổi nếu nó có thể thay đổi động. Ví dụ: danh sách và từ điển có thể thay đổi nhưng chuỗi và bộ dữ liệu là bất biến

Loại bỏ các quảng cáo

Phương thức sơ thẩm

Các phương thức sơ thẩm là các hàm được định nghĩa bên trong một lớp và chỉ có thể được gọi từ một thể hiện của lớp đó. Cũng giống như

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43, tham số đầu tiên của phương thức cá thể luôn là
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



48

Mở một cửa sổ soạn thảo mới trong IDLE và nhập lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 sau

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
64

Lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 này có hai phương thức thể hiện

  1. dog[10].breed = 'Golden Retriever'
    dog[10].weight = 57.5
    
    647 trả về một chuỗi hiển thị tên và tuổi của con chó
  2. dog[10].breed = 'Golden Retriever'
    dog[10].weight = 57.5
    
    648 có một tham số gọi là
    dog[10].breed = 'Golden Retriever'
    dog[10].weight = 57.5
    
    649 và trả về một chuỗi chứa tên của con chó và âm thanh mà con chó tạo ra

Lưu lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 đã sửa đổi vào tệp có tên
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
651 và nhấn F5 để chạy chương trình. Sau đó, mở cửa sổ tương tác và nhập nội dung sau để xem các phương thức phiên bản của bạn đang hoạt động.

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
65

Trong lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 ở trên,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
647 trả về một chuỗi chứa thông tin về thể hiện của
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641. Khi viết các lớp của riêng bạn, bạn nên có một phương thức trả về một chuỗi chứa thông tin hữu ích về một thể hiện của lớp. Tuy nhiên,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
647 không phải là cách Pythonic nhất để làm điều này

Khi bạn tạo một đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
657, bạn có thể sử dụng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
658 để hiển thị một chuỗi giống như danh sách

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
66

Hãy xem điều gì xảy ra khi bạn

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
658 đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
67

Khi bạn

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
661, bạn nhận được một thông báo khó hiểu cho bạn biết rằng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641 là một đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 tại địa chỉ bộ nhớ
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
664. Thông báo này không hữu ích lắm. Bạn có thể thay đổi nội dung được in bằng cách xác định một phương thức thể hiện đặc biệt có tên là
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
665

Trong cửa sổ soạn thảo, đổi tên phương thức

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
647 của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 thành
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
665

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
68

Lưu tệp và nhấn F5 . Bây giờ, khi bạn

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
661, bạn sẽ nhận được kết quả đầu ra thân thiện hơn nhiều.

>>>

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
69

Các phương thức như

class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
665 được gọi là các phương thức dunder vì chúng bắt đầu và kết thúc bằng hai dấu gạch dưới. Có nhiều phương thức khác mà bạn có thể sử dụng để tùy chỉnh các lớp trong Python. Mặc dù một chủ đề quá nâng cao đối với một cuốn sách Python mới bắt đầu, nhưng việc hiểu các phương thức dunder là một phần quan trọng để thành thạo lập trình hướng đối tượng trong Python

Trong phần tiếp theo, bạn sẽ thấy cách nâng cao kiến ​​thức của mình thêm một bước nữa và tạo các lớp từ các lớp khác

Loại bỏ các quảng cáo

Kiểm tra việc hiểu của bạn

Mở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn

Tập thể dục. Tạo một loại ô tôHiển thị/Ẩn

Tạo một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
672 với hai thuộc tính thể hiện

  1. dog[10].breed = 'Golden Retriever'
    dog[10].weight = 57.5
    
    673, lưu trữ tên màu xe ô tô dưới dạng một chuỗi
  2. dog[10].breed = 'Golden Retriever'
    dog[10].weight = 57.5
    
    674, lưu trữ số dặm trên xe dưới dạng số nguyên

Sau đó, khởi tạo hai đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
672—một ô tô màu xanh với 20.000 dặm và một ô tô màu đỏ với 30.000 dặm—và in ra màu sắc và số dặm của chúng. Đầu ra của bạn sẽ trông như thế này

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
60

Bạn có thể mở rộng khối bên dưới để xem giải pháp

Giải pháp. Tạo một loại ô tôHiển thị/Ẩn

Đầu tiên, tạo một lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
672 với các thuộc tính đối tượng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
673 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
674

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
61

Các tham số

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
679 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
680 của
class Dog:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        self.food = self.weight/2.5 #Amount (oz) of food



43 được gán cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
682 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
683, tạo ra hai thuộc tính thể hiện

Bây giờ bạn có thể tạo hai phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
672

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
62

Phiên bản

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
685 được tạo bằng cách chuyển giá trị
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
686 cho tham số
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
679 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
688 cho tham số
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
680. Tương tự,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
690 được tạo với các giá trị
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
691 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
692

Để in màu và số dặm của từng đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
672, bạn có thể lặp lại một
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
694 chứa cả hai đối tượng

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
63

Chuỗi f trong vòng lặp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
695 ở trên chèn các thuộc tính
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
673 và
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
674 vào chuỗi và sử dụng trình xác định định dạng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
698 để in số dặm được nhóm theo hàng nghìn và được phân tách bằng dấu phẩy

Đầu ra cuối cùng trông như thế này

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
60

Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo

Kế thừa từ các lớp khác trong Python

Kế thừa là quá trình mà một lớp đảm nhận các thuộc tính và phương thức của lớp khác. Các lớp mới được tạo thành được gọi là lớp con và các lớp mà các lớp con được dẫn xuất từ ​​đó được gọi là lớp cha

Ghi chú. Hướng dẫn này được chuyển thể từ chương “Lập trình hướng đối tượng (OOP)” trong Python Basics. Giới thiệu thực tế về Python 3. Nếu bạn thích những gì bạn đang đọc, thì hãy nhớ xem phần còn lại của cuốn sách

Các lớp con có thể ghi đè hoặc mở rộng các thuộc tính và phương thức của các lớp cha. Nói cách khác, các lớp con kế thừa tất cả các thuộc tính và phương thức của lớp cha nhưng cũng có thể chỉ định các thuộc tính và phương thức duy nhất cho chính chúng

Mặc dù phép loại suy không hoàn hảo, nhưng bạn có thể nghĩ về kiểu thừa kế đối tượng giống như kiểu thừa kế di truyền

Bạn có thể đã thừa hưởng màu tóc từ mẹ của bạn. Đó là một thuộc tính mà bạn được sinh ra với. Giả sử bạn quyết định nhuộm tóc màu tím. Giả sử mẹ bạn không có tóc màu tím, bạn vừa ghi đè thuộc tính màu tóc mà bạn được thừa hưởng từ mẹ mình

Theo một nghĩa nào đó, bạn cũng được thừa hưởng ngôn ngữ của mình từ cha mẹ. Nếu cha mẹ bạn nói tiếng Anh, thì bạn cũng sẽ nói tiếng Anh. Bây giờ hãy tưởng tượng bạn quyết định học một ngôn ngữ thứ hai, chẳng hạn như tiếng Đức. Trong trường hợp này, bạn đã mở rộng các thuộc tính của mình vì bạn đã thêm một thuộc tính mà cha mẹ bạn không có

Ví dụ về công viên chó

Giả vờ trong giây lát rằng bạn đang ở công viên dành cho chó. Có rất nhiều giống chó khác nhau tại công viên, tất cả đều tham gia vào các hành vi khác nhau của chó

Giả sử bây giờ bạn muốn lập mô hình công viên dành cho chó với các lớp Python. Lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 mà bạn đã viết trong phần trước có thể phân biệt chó theo tên và tuổi nhưng không phải theo giống

Bạn có thể sửa đổi lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 trong cửa sổ soạn thảo bằng cách thêm thuộc tính
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
601

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
65

Các phương thức thể hiện được xác định trước đó được bỏ qua ở đây vì chúng không quan trọng đối với cuộc thảo luận này

Nhấn F5 để lưu tệp. Giờ đây, bạn có thể lập mô hình công viên dành cho chó bằng cách khởi tạo một loạt các chú chó khác nhau trong cửa sổ tương tác.

>>>

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
66

Mỗi giống chó có hành vi hơi khác nhau. Ví dụ, chó bulgie có tiếng sủa trầm nghe giống như tiếng gâu gâu, nhưng chó dachshund có tiếng sủa cao hơn nghe giống tiếng yap hơn

Chỉ sử dụng lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, bạn phải cung cấp một chuỗi cho đối số
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649 của
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 mỗi khi bạn gọi nó trên một thực thể
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

>>>

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
67

Việc chuyển một chuỗi cho mọi cuộc gọi tới

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 lặp đi lặp lại và gây bất tiện. Hơn nữa, chuỗi đại diện cho âm thanh mà mỗi phiên bản
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 tạo ra phải được xác định bởi thuộc tính
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
601 của nó, nhưng ở đây bạn phải chuyển chuỗi chính xác theo cách thủ công cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 mỗi khi nó được gọi

Bạn có thể đơn giản hóa trải nghiệm làm việc với lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 bằng cách tạo một lớp con cho mỗi giống chó. Điều này cho phép bạn mở rộng chức năng mà mỗi lớp con kế thừa, bao gồm chỉ định đối số mặc định cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648

Loại bỏ các quảng cáo

Lớp cha mẹ so với lớp con

Hãy tạo một lớp con cho mỗi trong ba giống được đề cập ở trên. Jack Russell Terrier, Dachshund và Bulldog

Để tham khảo, đây là định nghĩa đầy đủ của lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
68

Hãy nhớ rằng, để tạo một lớp con, bạn tạo lớp mới với tên riêng của nó và sau đó đặt tên của lớp cha trong ngoặc đơn. Thêm phần sau vào tệp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
651 để tạo ba lớp con mới của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
69

Nhấn F5 để lưu và chạy tệp. Với các lớp con đã được xác định, giờ đây bạn có thể khởi tạo một số giống chó cụ thể trong cửa sổ tương tác.

>>>

>>> class Dog:
..     pass
70

Các thể hiện của lớp con kế thừa tất cả các thuộc tính và phương thức của lớp cha

>>>

>>> class Dog:
..     pass
71

Để xác định một đối tượng nhất định thuộc về lớp nào, bạn có thể sử dụng

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
615 tích hợp sẵn

>>>

>>> class Dog:
..     pass
72

Nếu bạn muốn xác định xem

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641 cũng là một thể hiện của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 thì sao?

>>>

>>> class Dog:
..     pass
73

Lưu ý rằng

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
618 có hai đối số, một đối tượng và một lớp. Trong ví dụ trên,
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
618 kiểm tra xem
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641 có phải là một thể hiện của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 hay không và trả về
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
623

Các đối tượng

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
638,
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
626 và
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
627 đều là phiên bản
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, nhưng
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
641 không phải là phiên bản
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
630 và
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
626 không phải là phiên bản
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
632

>>>

>>> class Dog:
..     pass
74

Tổng quát hơn, tất cả các đối tượng được tạo từ một lớp con là thể hiện của lớp cha, mặc dù chúng có thể không phải là thể hiện của các lớp con khác

Bây giờ bạn đã tạo các lớp con cho một số giống chó khác nhau, hãy cung cấp cho mỗi giống chó âm thanh riêng

Mở rộng chức năng của lớp cha

Vì các giống chó khác nhau có tiếng sủa hơi khác nhau, nên bạn muốn cung cấp giá trị mặc định cho đối số ________ 1649 của các phương pháp ________ 1648 tương ứng của chúng. Để thực hiện việc này, bạn cần ghi đè lên

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 trong định nghĩa lớp cho từng giống

Để ghi đè một phương thức được định nghĩa trên lớp cha, bạn định nghĩa một phương thức có cùng tên trên lớp con. Đây là giao diện của lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09

>>> class Dog:
..     pass
75

Bây giờ

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 được định nghĩa trên lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 với đối số mặc định cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649 được đặt thành
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
640

Cập nhật

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
651 với lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 mới và nhấn F5 để lưu và chạy tệp. Giờ đây, bạn có thể gọi
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 trên phiên bản
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 mà không cần truyền đối số cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649.

>>>

>>> class Dog:
..     pass
76

Đôi khi chó tạo ra những tiếng sủa khác nhau, vì vậy nếu Miles tức giận và gầm gừ, bạn vẫn có thể gọi

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 bằng một âm thanh khác

>>>

>>> class Dog:
..     pass
77

Một điều cần lưu ý về kế thừa lớp là các thay đổi đối với lớp cha sẽ tự động lan truyền sang các lớp con. Điều này xảy ra miễn là thuộc tính hoặc phương thức được thay đổi không bị ghi đè trong lớp con

Ví dụ: trong cửa sổ soạn thảo, thay đổi chuỗi được trả về bởi

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 trong lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

>>> class Dog:
..     pass
78

Lưu tệp và nhấn F5 . Bây giờ, khi bạn tạo một phiên bản

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
630 mới có tên là
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
627, thì
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
651 sẽ trả về chuỗi mới.

>>>

>>> class Dog:
..     pass
79

Tuy nhiên, gọi

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 trên phiên bản
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 sẽ không hiển thị kiểu đầu ra mới

>>>

>>> class Dog:
..     pass
76

Đôi khi, thật hợp lý khi ghi đè hoàn toàn một phương thức từ lớp cha. Nhưng trong trường hợp này, chúng tôi không muốn lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 mất bất kỳ thay đổi nào có thể được thực hiện đối với định dạng của chuỗi đầu ra của
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
655

Để làm điều này, bạn vẫn cần định nghĩa một phương thức

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 trên lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 con. Nhưng thay vì xác định rõ ràng chuỗi đầu ra, bạn cần gọi lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 của lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 bên trong lớp con
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 bằng cách sử dụng cùng các đối số mà bạn đã truyền cho
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
661

Bạn có thể truy cập lớp cha từ bên trong một phương thức của lớp con bằng cách sử dụng

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
662

>>> class Dog:
..     pass
1

Khi bạn gọi

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
663 bên trong
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09, Python sẽ tìm kiếm lớp cha,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01, để tìm một phương thức
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 và gọi nó với biến
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649

Cập nhật

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
651 với lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 mới. Lưu tệp và nhấn F5 để bạn có thể kiểm tra tệp trong cửa sổ tương tác.

>>>

>>> class Dog:
..     pass
2

Bây giờ khi bạn gọi

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
670, bạn sẽ thấy đầu ra phản ánh định dạng mới trong lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01

Ghi chú. Trong các ví dụ trên, hệ thống phân cấp lớp rất đơn giản. Lớp

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
09 có một lớp cha duy nhất,
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01. Trong các ví dụ thực tế, hệ thống phân cấp lớp có thể trở nên khá phức tạp

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
662 làm được nhiều việc hơn là chỉ tìm kiếm phương thức hoặc thuộc tính trong lớp cha. Nó đi qua toàn bộ hệ thống phân cấp lớp cho một phương thức hoặc thuộc tính phù hợp. Nếu bạn không cẩn thận,
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
662 có thể có kết quả đáng ngạc nhiên

Loại bỏ các quảng cáo

Kiểm tra việc hiểu của bạn

Mở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn

Tập thể dục. Kế thừa lớpHiển thị/Ẩn

Tạo một lớp

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
676 kế thừa từ lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01. Cung cấp cho đối số
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649 của
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
679 một giá trị mặc định là
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
680. Sử dụng đoạn mã sau cho lớp cha mẹ
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 của bạn

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
68

Bạn có thể mở rộng khối bên dưới để xem giải pháp

Giải pháp. Kế thừa lớpHiển thị/Ẩn

Tạo một lớp có tên là

class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
676 kế thừa từ lớp
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
01 và ghi đè phương thức
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648

>>> class Dog:
..     pass
4

Tham số

dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649 trong
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
679 có giá trị mặc định là
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
680. Sau đó,
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
662 được sử dụng để gọi phương thức
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 của lớp cha với cùng một đối số được truyền cho
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
649 như phương thức
dog[10].breed = 'Golden Retriever'
dog[10].weight = 57.5
648 của lớp
class Cat:
    
    def __inti__(self, breed, weight):
        self.breed = breed
        self.weight  = weight
    
    def feed(self):
        if self.weight < 9:
        self.food = self.weight*10 #Amount (oz) of food
        elif 9 < self.weight < 14:
        self.food = self.weight*15 #Amount (oz) of food
        elif self.weight > 14:
        self.food = self.weight*20 #Amount (oz) of food

alex = Dog('Pug', 17)
orion = Cat('Ginger', 9.5)

alex.feed()

orion.feed() 
676

Sự kết luận

Trong hướng dẫn này, bạn đã học về lập trình hướng đối tượng (OOP) trong Python. Hầu hết các ngôn ngữ lập trình hiện đại, chẳng hạn như Java, C# và C++, đều tuân theo các nguyên tắc OOP, vì vậy kiến ​​thức bạn thu được ở đây sẽ được áp dụng cho dù sự nghiệp lập trình của bạn đưa bạn đến đâu.

Trong hướng dẫn này, bạn đã học cách

  • Định nghĩa một lớp, là một loại bản thiết kế cho một đối tượng
  • Khởi tạo một đối tượng từ một lớp
  • Sử dụng các thuộc tính và phương thức để xác định các thuộc tính và hành vi của một đối tượng
  • Sử dụng tính kế thừa để tạo các lớp con từ lớp cha
  • Tham chiếu một phương thức trên lớp cha bằng cách sử dụng
    class Cat:
        
        def __inti__(self, breed, weight):
            self.breed = breed
            self.weight  = weight
        
        def feed(self):
            if self.weight < 9:
            self.food = self.weight*10 #Amount (oz) of food
            elif 9 < self.weight < 14:
            self.food = self.weight*15 #Amount (oz) of food
            elif self.weight > 14:
            self.food = self.weight*20 #Amount (oz) of food
    
    alex = Dog('Pug', 17)
    orion = Cat('Ginger', 9.5)
    
    alex.feed()
    
    orion.feed() 
    
    662
  • Kiểm tra xem một đối tượng có kế thừa từ một lớp khác hay không bằng cách sử dụng
    class Cat:
        
        def __inti__(self, breed, weight):
            self.breed = breed
            self.weight  = weight
        
        def feed(self):
            if self.weight < 9:
            self.food = self.weight*10 #Amount (oz) of food
            elif 9 < self.weight < 14:
            self.food = self.weight*15 #Amount (oz) of food
            elif self.weight > 14:
            self.food = self.weight*20 #Amount (oz) of food
    
    alex = Dog('Pug', 17)
    orion = Cat('Ginger', 9.5)
    
    alex.feed()
    
    orion.feed() 
    
    618

Nếu bạn thích những gì bạn học được trong ví dụ này từ Python Basics. Giới thiệu thực tế về Python 3, thì hãy nhớ xem phần còn lại của cuốn sách

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Giới thiệu về Lập trình hướng đối tượng (OOP) trong Python

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Học oop trong python có tốt không?

Gửi cho tôi thủ thuật Python »

Giới thiệu về David Amos

Học oop trong python có tốt không?
Học oop trong python có tốt không?

David là một nhà văn, lập trình viên và nhà toán học đam mê khám phá toán học thông qua mã

» Thông tin thêm về David


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Học oop trong python có tốt không?

Aldren

Học oop trong python có tốt không?

Joanna

Học oop trong python có tốt không?

Gia-cốp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Học oop trong python có tốt không?

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

OOP có hữu ích trong Python không?

OOP bằng Python . Các chương trình OOP ngăn bạn lặp lại mã vì một lớp có thể được xác định một lần và được sử dụng lại nhiều lần. Developers often choose to use OOP in their Python programs because it makes code more reusable and makes it easier to work with larger programs. OOP programs prevent you from repeating code because a class can be defined once and reused many times.

Tại sao tôi nên học OOP trong Python?

Python được thiết kế theo hướng tiếp cận OOP và nó mang lại những ưu điểm sau. Cung cấp cấu trúc chương trình rõ ràng và mã rõ ràng . Tạo điều kiện dễ dàng bảo trì và sửa đổi mã hiện có. Vì lớp có thể chia sẻ được nên mã có thể được sử dụng lại.

OOP trong Python có khó không?

OOP Python rất khó .

Tôi nên học OOP bằng Java hay Python?

Java là lựa chọn tốt hơn để tìm hiểu kiến ​​thức cơ bản về lập trình hướng đối tượng . Python có các đối tượng, nhưng chúng không phải là trung tâm của ngôn ngữ như trong Java. Smalltalk và Ruby thậm chí còn tốt hơn cho việc học OOP.