Hướng dẫn is oop important in python? - oop có quan trọng trong python không?

#Sandal is the child class to parent class Shoe

Show

class Sandal(Shoe):

def __init__(self, size, isOnSale, material, price, waterproof):

#inherit self, size, isOnSale, material, and price properties

Shoe.__init__(self, size, isOnSale, material, price)

#expands Sandal to contain additional property waterproof

self.waterproof = waterproof

#overwrites printInfo to reference "pair of sandals" rather than shoes

def printInfo(self):

return f" This pair of sandals are size {self.size}, are made of {self.material}, and costs ${self.price}"

sandal1 = Sandal(11, False, "leather", 81, True)

print (sandal1.printInfo())

Xác định một lớp, là một loại bản thiết kế cho một đối tượng This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Intro to Object-Oriented Programming (OOP) in Python

Khởi tạo một đối tượng từ một lớp (OOP) is a method of structuring a program by bundling related properties and behaviors into individual objects. In this tutorial, you’ll learn the basics of object-oriented programming in Python.

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

Một đối tượng chứa dữ liệu, như các vật liệu thô hoặc được xử lý trước ở mỗi bước trên một dây chuyền lắp ráp và hành vi, như hành động 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ượngclass, which is like a blueprint for creating an object
  • Sử dụng các lớp để tạo các đối tượng mớicreate new objects
  • Các hệ thống mô hình với kế thừa lớp họcclass inheritance

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 một phương tiện cấu trúc các chương trình để các thuộc tính và hành vi được gói vào các đối tượng riêng lẻ.objects.

Chẳng hạn, một đối tượng có thể đại diện cho một người có tài sản như tên, tuổi tác, và địa chỉ và 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 với các thuộc tính như danh sách người nhận, chủ thể, và cơ thể và các hành vi như thêm tệp đính kèm và gửi.properties like a name, age, and address and behaviors such as walking, talking, breathing, and running. Or it could represent an email with properties like a recipient list, subject, and body and behaviors like adding attachments and sending.

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ụ thể, những thứ thực tế, như xe hơi, cũng như quan hệ giữa mọi thứ, như công ty và nhân viên, sinh viên và giáo viên, v.v. OOP mô hình các thực thể trong thế giới thực như các đối tượng phần mềm có một số dữ liệu liên quan đến 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 chức năng và khối mã, lưu lượng tuần tự để hoàn thành một nhiệm vụ.procedural programming, which structures a program like a recipe in that it provides a set of steps, in the form of functions and code blocks, that flow sequentially in order to complete a task.

Điều quan trọng là các đối tượng là 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.

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

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

Ví dụ, hãy để nói rằng 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, chẳng hạn như tên, tuổi, vị trí và năm họ 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 phương pháp này.

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

>>> class Dog:
...     pass
5 Một vài dòng cách xa danh sách
>>> class Dog:
...     pass
6 được khai báo, bạn sẽ nhớ rằng phần tử có chỉ mục
>>> class Dog:
...     pass
7 là tên của nhân viên?

Thứ hai, nó có thể giới thiệu lỗi nếu không phải mọi nhân viên đều có cùng số lượng các yếu 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ở lại
>>> Dog()
<__main__.Dog object at 0x106702d30>
0 thay vì tuổi của Tiến sĩ McCoy.

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

Các lớp học vs

Các lớp được sử dụng để tạo cấu trúc dữ liệu do người dùng xác định. Các lớp xác định các chức năng đượ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ó.methods, which identify the behaviors and actions that an object created from the class can perform with its data.

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 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á nhân có thể có.

Một lớp học là một bản thiết kế cho cách xác định một cái gì đó. Nó không thực sự chứa bất kỳ dữ liệu nào. Lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 quy định rằng một tên và một độ 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.

Mặc dù lớp là bản thiết kế, 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 ví dụ của lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 không phải là một kế hoạch chi tiết nữa. Nó có một con chó thực sự với một cái tên, giống như Miles, người mà bốn tuổi.instance is an object that is built from a class and contains real data. An instance of the
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 class is not a blueprint anymore. It’s an actual dog with a name, like Miles, who’s four years old.

Nói cách khác, một lớp học giống như một hình thức hoặc bảng câu hỏi. Một ví dụ giống như một hình thức đã được điền thông tin. Giống như nhiều người có thể điền vào cùng một hình thức với thông tin độc đáo 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 học

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
4, được theo sau là tên của lớp và một 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 cơ thể lớp.

Ở đây, một ví dụ về một lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 bao gồm một câu lệnh: Từ khóa
>>> Dog()
<__main__.Dog object at 0x106702d30>
7.
>>> Dog()
<__main__.Dog object at 0x106702d30>
7 thường được sử dụng làm người giữ chỗ cho biết mã cuối cùng sẽ đi đâu. Nó cho phép bạn chạy mã này mà không cần phải ném lỗi.

Lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 hiện đang rất thú vị, vì vậy, hãy để Lừa lê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()
<__main__.Dog object at 0x106702d30>
1 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 áo 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()
<__main__.Dog object at 0x106702d30>
1 phải được xác định trong một phương thức gọi là
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2. Mỗi khi một đối tượng
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới được tạo,
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 đặt trạng thái ban đầu của đối tượng bằng cách gán các giá trị của các thuộc tính của đối tượng. Nghĩa là,
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 khởi tạo từng thể hiện mới của lớp.state of the object by assigning the values of the object’s properties. That is,
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 initializes each new instance of the class.

Bạn có thể cung cấp

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 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 gọi là
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
7. Khi một thể hiện lớp mới được tạo, phiên bản được tự động chuyển đến tham số
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
7 trong
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 để các thuộc tính mới có thể được xác định trên đối tượng.attributes can be defined on the object.

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 với phương thức
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 tạo ra các thuộc tính
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
2 và
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
3:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

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

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 được thụt vào bốn không gian. Cơ thể của phương pháp được thụt lề bởi tám không gian. Sự thụt này là cực kỳ quan trọng. Nó nói với Python rằng phương pháp
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 thuộc về lớp
>>> Dog()
<__main__.Dog object at 0x106702d30>
1.

Trong phần thân của

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2, có hai tuyên bố sử dụng biến
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
7:

  1. >>> a = Dog()
    >>> b = Dog()
    >>> a == b
    False
    
    9 tạo một thuộc tính gọi là
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    0 và gán cho nó giá trị của tham số
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    0.
    creates an attribute called
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    0 and assigns to it the value of the
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    0 parameter.
  2. >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    2 tạo một thuộc tính gọi là
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    3 và gán cho nó giá trị của tham số
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    3.
    creates an attribute called
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    3 and assigns to it the value of the
    >>> class Dog:
    ...     species = "Canis familiaris"
    ...     def __init__(self, name, age):
    ...         self.name = name
    ...         self.age = age
    
    3 parameter.

Các thuộc tính được tạo trong

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 được gọi là thuộc tính thể hiện. Một giá trị thuộc tính thể hiện là cụ thể cho một trường hợp cụ thể của lớp. Tất cả các đối tượng
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 đều có tên và tuổi, nhưng các giá trị cho các thuộc tính
>>> class Dog:
...     species = "Canis familiaris"
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
0 và
>>> class Dog:
...     species = "Canis familiaris"
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
3 sẽ thay đổi tùy thuộc vào thể hiện
>>> Dog()
<__main__.Dog object at 0x106702d30>
1.instance attributes. An instance attribute’s value is specific to a particular instance of the class. All
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 objects have a name and an age, but the values for the
>>> class Dog:
...     species = "Canis familiaris"
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
0 and
>>> class Dog:
...     species = "Canis familiaris"
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age
3 attributes will vary depending on the
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 instance.

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

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2.class attributes are attributes that have the same value for all class instances. You can define a class attribute by assigning a value to a variable name outside of
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2.

Ví dụ: lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 sau đây có thuộc tính lớp có tên
>>> Dog()
Traceback (most recent call last):
  File "", line 1, in 
    Dog()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
2 với giá trị
>>> Dog()
Traceback (most recent call last):
  File "", line 1, in 
    Dog()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
3:

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age

Các thuộc tính 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 không gian. 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 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 lớp để xác định các thuộc tính nên có cùng giá trị cho mọi thể hiện lớp. Sử dụng các thuộc tính thể hiện cho các thuộc tính thay đổi từ trường hợp này sang trường hợp khác.

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, hãy để tạo ra một số con chó!

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

Mở cửa sổ tương tác Idle Idle và nhập như sau:

>>>

>>> class Dog:
...     pass

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 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()
<__main__.Dog object at 0x106702d30>
1 mới bằng cách nhập tên của lớp, theo sau bằng cách mở và đóng dấu ngoặc đơn:instantiating an object. You can instantiate a new
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 object by typing the name of the class, followed by opening and closing parentheses:

>>>

>>> Dog()
<__main__.Dog object at 0x106702d30>

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới không có thuộc tính hoặc phương thức.memory address that indicates where the
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 object is stored in your computer’s memory. Note that the address you see on your screen will be different.

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()
<__main__.Dog object at 0x106702d30>
1 mới bằng cách nhập tên của lớp, theo sau bằng cách mở và đóng dấu ngoặc đơn:

>>>

>>> Dog()
<__main__.Dog object at 0x0004ccc90>

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 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()
<__main__.Dog object at 0x106702d30>
1 mới bằng cách nhập tên của lớp, theo sau bằng cách mở và đóng dấu ngoặc đơn:

>>>

>>> a = Dog()
>>> b = Dog()
>>> a == b
False

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 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() <__main__.Dog object at 0x106702d30> 1 mới bằng cách nhập tên của lớp, theo sau bằng cách mở và đóng dấu ngoặc đơn:

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới tại
>>> Dog()
Traceback (most recent call last):
  File "", line 1, in 
    Dog()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
8. Chuỗi các chữ cái và số trông hài hước này là một địa chỉ bộ nhớ cho biết nơi đối tượng
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 được lưu trữ trong bộ nhớ máy tính của bạn. Lưu ý rằng địa chỉ bạn thấy trên màn hình của bạn sẽ khác.

>>>

>>> class Dog:
...     species = "Canis familiaris"
...     def __init__(self, name, age):
...         self.name = name
...         self.age = age

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới không có thuộc tính hoặc phương thức.

>>>

>>> Dog()
Traceback (most recent call last):
  File "", line 1, in 
    Dog()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới không có thuộc tính hoặc phương thức.

>>>

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

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 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()
<__main__.Dog object at 0x106702d30>
1 mới bằng cách nhập tên của lớp, theo sau bằng cách mở và đóng dấu ngoặc đơn:

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mới tại
>>> Dog()
Traceback (most recent call last):
  File "", line 1, in 
    Dog()
TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'
8. Chuỗi các chữ cái và số trông hài hước này là một địa chỉ bộ nhớ cho biết nơi đối tượng
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 được lưu trữ trong bộ nhớ máy tính của bạn. Lưu ý rằng địa chỉ bạn thấy trên màn hình của bạn sẽ khác.

Sau khi bạn tạo các phiên bản

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, bạn có thể truy cập các thuộc tính thể hiện của chúng bằng cách sử dụng ký hiệu DOT:dot notation:

>>>

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

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

>>>

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

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

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 trường hợp được đảm bảo có các thuộc tính mà bạn mong đợi. Tất cả các trường hợp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 đều có các thuộc tính
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
14,
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
2 và
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
3, vì vậy bạn có thể sử dụng các thuộc tính đó với sự tự tin khi biết rằng chúng sẽ luôn trả về một giá trị.

>>>

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

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

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 trường hợp được đảm bảo có các thuộc tính mà bạn mong đợi. Tất cả các trường hợp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 đều có các thuộc tính
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
14,
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
2 và
>>> a = Dog()
>>> b = Dog()
>>> a == b
False
3, vì vậy bạn có thể sử dụng các thuộc tính đó với sự tự tin 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, giá trị của chúng có thể được thay đổi một cách linh hoạt:

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

>>> a = Dog()
>>> b = Dog()
>>> a == b
False
3 của đối tượng
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
37 thành
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
38. Sau đó, bạn thay đổi thuộc tính
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
14 của đối tượng
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
40 thành
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
41, đây là một loài mèo. Điều đó làm cho Miles trở thành một con chó khá kỳ lạ, nhưng nó là Python hợp lệ!
are functions that are defined inside a class and can only be called from an instance of that class. Just like
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2, an instance method’s first parameter is always
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
7.

Điểm quan trọng ở đâ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ể được thay đổi một cách linh hoạt. Ví dụ, danh sách và từ điển là có thể thay đổi, nhưng chuỗi và bộ dữ liệu là bất biến.

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

Phương pháp thể hiện

  1. Các phương thức thể hiện là các hàm được xác định bên trong một lớp và chỉ có thể được gọi từ một thể hiện của lớp đó. Giống như
    >>> Dog()
    <__main__.Dog object at 0x0004ccc90>
    
    2, một phương thức thể hiện tham số đầu tiên luôn luôn là
    >>> Dog()
    <__main__.Dog object at 0x0004ccc90>
    
    7.
    returns a string displaying the name and age of the dog.
  2. Mở cửa sổ Trình chỉnh sửa mới trong IDLE và nhập lớp
    >>> Dog()
    <__main__.Dog object at 0x106702d30>
    
    1 sau:
    has one parameter called
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    48 and returns a string containing the dog’s name and the sound the dog makes.

Lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 này có hai phương thức thể hiện:F5 to run the program. Then open the interactive window and type the following to see your instance methods in action:

>>>

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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
46 Trả về một chuỗi hiển thị tên và tuổi của con chó.

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 có một tham số gọi là
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 và trả về một chuỗi chứa tên chó và âm thanh mà con chó tạo ra.

>>>

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

Lưu lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 đã sửa đổi vào một tệp có tên
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
50 và nhấn F5 để chạy chương trình. Sau đó, mở cửa sổ tương tác và nhập phần sau để xem các phương thức thể hiện của bạn trong hành động:

>>>

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

Trong lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 trên,
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
46 trả về một chuỗi chứa thông tin về phiên bản
>>> Dog()
<__main__.Dog object at 0x106702d30>
1
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
40. Khi viết các lớp học của riêng bạn, bạn có một ý tưởng tốt để 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,
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
46 không phải là cách làm điều này.

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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
56, bạn có thể sử dụng
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
57 để hiển thị một chuỗi trông giống như danh sách:

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

Hãy để xem những gì xảy ra khi bạn

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
57 đối tượng
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
40:F5. Now, when you
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
60, you get a much friendlier output:

>>>

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

Khi bạn

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
60, bạn sẽ nhận được một tin nhắn trông khó hiểu nói với bạn rằng
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
40 là đối tượng
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 tại địa chỉ bộ nhớ
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
63. Thông điệp này rất hữu ích. Bạn có thể thay đổi những gì được in bằng cách xác định một phương thức thể hiện đặc biệt gọi là
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
64.dunder methods because they begin and end with double underscores. There are many dunder methods that you can use to customize classes in Python. Although too advanced a topic for a beginning Python book, understanding dunder methods is an important part of mastering object-oriented programming in Python.

Trong cửa sổ Trình chỉnh sửa, hãy thay đổi tên của phương thức

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 Lớp
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
46 thành
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
64:

Lưu tệp và nhấn F5. Bây giờ, khi bạn kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 60, bạn sẽ nhận được đầu ra thân thiện hơn nhiều:

Các phương pháp như

>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
64 được gọi là phương pháp Dunder vì chúng bắt đầu và kết thúc với các dấu gạch dưới kép. Có nhiều phương pháp Dunder mà bạn có thể sử dụng để tùy chỉnh các lớp trong Python. Mặc dù quá nâng cao một chủ đề cho một cuốn sách Python bắt đầu, hiểu các phương pháp Dunder là một phần quan trọng trong việc làm chủ lập trình hướng đối tượng trong Python.

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

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

Tạo một lớp

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
71 với hai thuộc tính thể hiện:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
0

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
72, nơi lưu trữ tên của màu xe hơi như một chuỗi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
73, lưu trữ số dặm trên xe như một số nguyên

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
1

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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
71 Một chiếc xe màu xanh với 20.000 dặm và một chiếc xe 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:

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
2

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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
71 với các thuộc tính phiên bản
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
72 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
73:

Các tham số

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
78 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
79 của
>>> Dog()
<__main__.Dog object at 0x0004ccc90>
2 được gán cho
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
81 và
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
82, tạo ra hai thuộc tính thể hiện.

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
3

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

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

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
0

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 một lớp khác. Các lớp mới được thành lập được gọi là các lớp con và các lớp mà các lớp con được bắt nguồn từ các lớp cha.child classes, and the classes that child classes are derived from are called parent classes.

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 cha mẹ 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ù sự tương tự là hoàn hảo, bạn có thể nghĩ về sự kế thừa đối tượng giống như di truyền di truyền.

Bạn có thể đã thừa hưởng màu tóc của bạn từ mẹ của bạn. Nó là một thuộc tính mà bạn được sinh ra. Hãy để nói rằng bạn quyết định tô màu cho tóc màu tím. Giả sử mẹ của bạn không có mái tóc màu tím, bạn chỉ cần ghi đè thuộc tính màu tóc mà bạn được thừa hưởng từ mẹ.overridden the hair color attribute that you inherited from your mom.

Bạn cũng thừa hưởng, theo một nghĩa nào đó, ngôn ngữ của bạn từ cha mẹ của bạn. Nếu bố 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, 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ó.extended your attributes because you’ve added an attribute that your parents don’t have.

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

Giả vờ một lúc bạn ở một công viên chó. Có rất nhiều con chó của các 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 chó khác nhau.

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 mà bạn đã viết trong phần trước có thể phân biệt chó bằng tên và tuổi nhưng không phải bằng giống.

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1 trong cửa sổ Trình chỉnh sửa bằng cách thêm thuộc tính
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
00:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
5

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

Nhấn F5 để lưu tệp. Bây giờ bạn có thể mô hình hóa công viên chó bằng cách khởi tạo một loạt các con chó khác nhau trong cửa sổ tương tác:F5 to save the file. Now you can model the dog park by instantiating a bunch of different dogs in the interactive window:

>>>

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
6

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

Chỉ sử dụng lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, bạn phải cung cấp một chuỗi cho đối số
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 của
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 mỗi khi bạn gọi nó theo phiên bản
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

>>>

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
7

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

Chỉ sử dụng lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, bạn phải cung cấp một chuỗi cho đối số
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 của
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 mỗi khi bạn gọi nó theo phiên bản
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

Chuyển một chuỗi cho mỗi cuộc gọi đến kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 là lặp đi lặp lại và bất tiện. Hơn nữa, chuỗi đại diện cho âm thanh mà mỗi trường hợp >>> Dog() <__main__.Dog object at 0x106702d30> 1 tạo nên được xác định bằng thuộc tính class Dog: def __init__(self, name, age): self.name = name self.age = age 00 của nó, nhưng ở đây bạn phải chuyển đúng chuỗi chính xác cho kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 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()
<__main__.Dog object at 0x106702d30>
1 bằng cách tạo ra 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 được kế thừa, bao gồm chỉ định một đối số mặc định cho
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47.

Các lớp phụ huynh so với các lớp con

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
8

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
9

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

>>> Dog()
<__main__.Dog object at 0x106702d30>
1:F5 to save and run the file. With the child classes defined, you can now instantiate some dogs of specific breeds in the interactive window:

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
0

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
1

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
2

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
3

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

Chỉ sử dụng lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, bạn phải cung cấp một chuỗi cho đối số
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 của
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 mỗi khi bạn gọi nó theo phiên bản
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
4

Mỗi giống chó có những hành vi hơi khác nhau. Ví dụ, những chú chó bulông có một vỏ cây thấp nghe giống như WOOF, nhưng Dachshunds có một vỏ cây cao hơn nghe có vẻ giống Yap hơn.

Chỉ sử dụng lớp

>>> Dog()
<__main__.Dog object at 0x106702d30>
1, bạn phải cung cấp một chuỗi cho đối số
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 của
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 mỗi khi bạn gọi nó theo phiên bản
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

Chuyển một chuỗi cho mỗi cuộc gọi đến kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 là lặp đi lặp lại và bất tiện. Hơn nữa, chuỗi đại diện cho âm thanh mà mỗi trường hợp >>> Dog() <__main__.Dog object at 0x106702d30> 1 tạo nên được xác định bằng thuộc tính class Dog: def __init__(self, name, age): self.name = name self.age = age 00 của nó, nhưng ở đây bạn phải chuyển đúng chuỗi chính xác cho kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 mỗi khi nó được gọi.

Vì các giống chó khác nhau có vỏ hơi khác nhau, bạn muốn cung cấp giá trị mặc định cho đối số

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 về các phương pháp
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 tương ứng của chúng. Để làm điều này, bạn cần ghi đè
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trong định nghĩa lớp cho mỗi giống.

Để ghi đè một phương thức được xác định trên lớp cha, bạn xác định một phương thức có cùng tên trên lớp con. Ở đây, những gì trông giống như lớp

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35:

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
5

Bây giờ

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 được xác định trên lớp
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 với đối số mặc định cho
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 được đặt thành
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
39.

Cập nhật

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
50 với lớp
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 mới và nhấn F5 để lưu và chạy tệp. Bây giờ bạn có thể gọi
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 theo ví dụ
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 mà không chuyển đối số cho
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48:F5 to save and run the file. You can now call
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 on a
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 instance without passing an argument to
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48:

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
6

Đôi khi những con 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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 với một âm thanh khác:

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
7

Đôi khi những con 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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 với một âm thanh khác:

Một điều cần lưu ý về sự kế thừa của lớp là các thay đổi đối với lớp cha mẹ tự động tuyên truyền đến 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 được ghi đè trong lớp con.

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
8

Ví dụ: trong cửa sổ Trình chỉnh sửa, thay đổi chuỗi được trả về bởi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trong lớp
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:F5. Now, when you create a new
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
29 instance named
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
26,
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
50 returns the new string:

>>>

class Dog:
    # Class attribute
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age
9

Đôi khi những con 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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 với một âm thanh khác:

>>>

Đôi khi những con 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
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 với một âm thanh khác:

Một điều cần lưu ý về sự kế thừa của lớp là các thay đổi đối với lớp cha mẹ tự động tuyên truyền đến 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 được ghi đè trong lớp con.

Ví dụ: trong cửa sổ Trình chỉnh sửa, thay đổi chuỗi được trả về bởi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trong lớp
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
29 mới có tên
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
26,
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
50 trả về chuỗi mới:

>>> class Dog:
...     pass
1

Tuy nhiên, việc gọi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trên một ví dụ
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 won đã hiển thị phong cách đầu ra mới:

>>> class Dog:
...     pass
0F5 so you can test it in the interactive window:

>>>

>>> class Dog:
...     pass
2

Đôi khi những con 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

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 với một âm thanh khác:

Một điều cần lưu ý về sự kế thừa của lớp là các thay đổi đối với lớp cha mẹ tự động tuyên truyền đến 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 được ghi đè trong lớp con.

Ví dụ: trong cửa sổ Trình chỉnh sửa, thay đổi chuỗi được trả về bởi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trong lớp
>>> Dog()
<__main__.Dog object at 0x106702d30>
1:

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
29 mới có tên
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
26,
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
50 trả về chuỗi mới:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
8

Tuy nhiên, việc gọi

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 trên một ví dụ
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 won đã hiển thị phong cách đầu ra mới:

>>> class Dog:
...     pass
0

>>> class Dog:
...     pass
4

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35 mất bất kỳ thay đổi nào có thể được thực hiện theo định dạng của chuỗi đầu ra của
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
54.

Để làm điều này, bạn vẫn cần xác định phương thức kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 trên lớp trẻ class Dog: def __init__(self, name, age): self.name = name self.age = age 35. Nhưng thay vì xác định rõ ràng chuỗi đầu ra, bạn cần gọi lớp >>> Dog() <__main__.Dog object at 0x106702d30> 1 ____ ____147 bên trong lớp con Lát kirk = ["James Kirk", 34, "Captain", 2265] spock = ["Spock", 35, "Science Officer", 2254] mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266] 47 bằng cách sử dụng các đối số tương tự mà bạn đã chuyển sang class Dog: def __init__(self, name, age): self.name = name self.age = age 60.

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

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
61:

Khi bạn gọi

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
62 bên trong
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
35, Python tìm kiếm lớp cha,
>>> Dog()
<__main__.Dog object at 0x106702d30>
1, cho một phương thức
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47 và gọi nó với biến
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48.

  • Cập nhật
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    50 với lớp
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    35 mới. Lưu tệp và nhấn F5 để bạn có thể kiểm tra nó trong cửa sổ tương tác:class, which is a sort of blueprint for an object
  • Bây giờ khi bạn gọi
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    69, bạn sẽ thấy đầu ra phản ánh định dạng mới trong lớp
    >>> Dog()
    <__main__.Dog object at 0x106702d30>
    
    1.object from a class
  • Kiểm tra việc hiểu của bạnattributes and methods to define the properties and behaviors of an object
  • Mở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn:inheritance to create child classes from a parent class
  • Tạo một lớp
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    71 kế thừa từ lớp
    >>> Dog()
    <__main__.Dog object at 0x106702d30>
    
    1. Cung cấp cho đối số
    kirk = ["James Kirk", 34, "Captain", 2265]
    spock = ["Spock", 35, "Science Officer", 2254]
    mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
    
    48 của
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    74 giá trị mặc định là
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    75. Sử dụng mã sau cho lớp phụ huynh
    >>> Dog()
    <__main__.Dog object at 0x106702d30>
    
    1 của bạn:
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    61
  • Bạn có thể mở rộng khối bên dưới để xem giải pháp:
    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    17

Tạo một lớp gọi là

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
71 kế thừa từ lớp
>>> Dog()
<__main__.Dog object at 0x106702d30>
1 và ghi đè phương thức
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
47:

Tham số

kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 trong
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
74 được cung cấp giá trị mặc định là
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
75. Sau đó,
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
61 được sử dụng để gọi phương thức của lớp cha ____ ____147 với cùng một đối số được chuyển đến
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
48 dưới dạng phương thức
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
71 Lớp ____ ____147. This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Intro to Object-Oriented Programming (OOP) in Python

Bạn có nên sử dụng OOP trong Python?

OOP trong các nhà phát triển Python thường chọn sử dụng OOP trong các chương trình Python của họ vì nó làm cho mã trở nên dễ tái sử dụng hơn và giúp làm việc dễ dàng hơn với các chương trình lớn hơn.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à 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.

OOP trong Python có cần thiết cho khoa học dữ liệu không?

Đơn giản chỉ cần biết rằng DataFrame là một đối tượng cho phép bạn hiểu lý do tại sao DataFrame có một số phương thức nhất định, trong khi, nói, một danh sách Python không.Là một nhà khoa học dữ liệu, bạn sẽ không cần phải sử dụng lập trình hướng đối tượng.Đừng rơi vào cái bẫy mà mọi thứ cần phải tuân theo mô hình OOP.you won't always need to use object-oriented programming. Don't fall into the trap that everything needs to follow an OOP paradigm.

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

Python được thiết kế với cách tiếp cận OOP và nó cung cấp các lợi thế sau: Cung cấp cấu trúc chương trình rõ ràng và mã sạch.Tạo điều kiện cho việc bảo trì và sửa đổi dễ dàng của mã hiện có.Vì lớp có thể chia sẻ, mã có thể được sử dụng lại.Provides a clear program structure and a clean code. Facilitates easy maintenance and modification of existing code. Since the class is sharable, the code can be reused.